Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

:cwindow で quickfix ウィンドウが開かない #258

Closed
osyo-manga opened this issue Sep 24, 2012 · 10 comments
Closed

:cwindow で quickfix ウィンドウが開かない #258

osyo-manga opened this issue Sep 24, 2012 · 10 comments

Comments

@osyo-manga
Copy link

quickfix にデータが出力されている場合に :cwindow で quickfix ウィンドウが開きません。
日本語の help には

認識されたエラーがあるときQuickFixウィンドウを開く。

と、記述されているのですが、認識されたエラーとは具体的にどこを参照しているのでしょうか。

  • 再現コード
cgetexpr "homuhomu"
cwindow

上記の場合ですと、:copen では quickfix ウィンドウが開き "homuhomu" が表記されます。
また getqflist() でもデータの取得が行えます。

  • vim-version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Sep 20 2012 23:03:48)
MS-Windows 32 ビット GUI 版
適用済パッチ: 1-666
@ynkdir
Copy link
Member

ynkdir commented Sep 24, 2012

認識されたエラーは 'errorformat' にマッチしたものということだと思います。

例えば

:set errorformat=homuhomu
:cgetexpr "homuhomu"
:cwindow

で開きます。

@koron
Copy link
Member

koron commented Sep 24, 2012

@ynkdir: つまり quickfix(が利用しているコンパイラや実行系)が吐くエラーがerrorformatにマッチしていなかった ということ?

@osyo-manga
Copy link
Author

あーなるほどそういう事でしたか。
ありがとうございました。

@koron
Copy link
Member

koron commented Sep 24, 2012

xlose/invalid で閉じときます。

@koron koron closed this as completed Sep 24, 2012
@h-east
Copy link
Member

h-east commented Sep 24, 2012

:help getqflist() の真ん中あたり

    valid   0以外: エラーメッセージが認識されている

とあります。では、「認識されていない状態」というのはどういう状態かというのは
:help setqflist() の真ん中あたりに書かれています。

    "filename" と "bufnr" の両方ともない場合、また
    は "lnum" と "pattern" の両方ともない場合、その要素はエラー行
    として扱われない。

このことから、「認識されている状態」というのは
QuickFixリスト中に1つでも以下の条件の要素が存在することになります。

  • "filename" か "bufnr" がセットされている。かつ、"lnum" か "pattern" がセットされている。


    (条件が合致すると "valid" が 1 になる)

再現コードの直後に getqflist() を実行すると "valid" が 0 なので「認識されていない状態」というのが分かります。
:cgetexpr "homuhomu"
:echo getqflist()
[{'lnum': 0, 'bufnr': 0, 'col': 0, 'valid': 0, 'vcol': 0, 'nr': -1, 'type': '', 'pattern': '', 'text': 'homuhomu'}]

ここでQuickFixリストに認識される要素に無理やり変更してみます。

:let ql = getqflist()
:let ql[0].lnum = 1
:let ql[0].bufnr = 1
:call setqflist(ql)
:echo getqflist()
[{'lnum': 1, 'bufnr': 1, 'col': 0, 'valid': 1, 'vcol': 0, 'nr': -1, 'type': '', 'pattern': '', 'text': 'homuhomu'}]

"valid" が 1 になったのでQuickFixリストとしては「認識されている状態」となりました。
これで `:cwindow' を実行するとquickfix ウィンドウが開きます。

以上、QuickFixリストの認識されている/されていない のお話でした。

どうして`:cwindow' だけこんな制限が付いているんでしょうね?。
場合によってはソース修正が必要??

@h-east
Copy link
Member

h-east commented Sep 24, 2012

わー、クローズされてたww

@koron
Copy link
Member

koron commented Sep 24, 2012

@h-east: ごめんwww

@osyo-manga
Copy link
Author

丁寧にありがとうございます><

@h-east
Copy link
Member

h-east commented Sep 24, 2012

しかもynkdirさんの回答が的確。

@k-takata
Copy link
Member

k-takata commented Sep 7, 2013

xlose/invalid で閉じときます。

仕様だったという場合は worksforme または wontfix の方が適切だと思います。
worksforme に変更しておきます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants