11

私は autocmd を持っています。そうであればftqfいくつかの関数を呼び出してクイックフィックスリストを変更しますget/setqflist()

get/setloclist()ロケーションリストを処理するために、別の関数のペアがあることを知っています。

私の問題は、どの関数を呼び出す必要があるかを知るために、現在のバッファがqf-listor location-list(両方とも) であるかどうかを知る方法です。filetype qf

これまでのところ、私が考えることができるのは、locリストとqfリストの両方が空ではないと仮定し、qf-listに変更を加えて、現在のバッファと比較します。現在のバッファも変更されている場合、それはqf-listです。そうでない場合はそうすべきですロケーションリストになります。最後に、変更をロールバックします。しかし、私はそれがばかげていると感じています...決定を下すためのより良い方法があるはずです.

関数/フラグ/変数を見逃しましたか?

4

4 に答える 4

2

There is a way to do this. Here's how:

You get the output of the "ls" command, which shows you the currently active buffers. Then you simply search that output for the existence/state of whatever window you want.

The example below will tell you if either the Quickfix or Location list window is focused:

function! example()
    exec 'redir @a | ls | redir END'
    if match(@a,'%a-  "\[Location List\]"') >= 0
            exec 'echo "Location list focused!"'
    elseif match(@a,'%a-  "\[Quickfix List\]"') >= 0
            exec 'echo "Quickfix list focused!"'
    else
            exec 'echo "Neither Location or Quicklist focused!"'
    endif
endfunction

I appreciate you asking this question and I noted that you even went so far as to try to find help elsewhere: http://vim.1045645.n5.nabble.com/detect-QuickFix-window-list-or-LocationList-td4952180.html.

I looked around the internet too, and found nothing. I think this answer should solve the problem.

于 2016-05-13T15:09:49.057 に答える
0

私が見つけた唯一の信頼できる方法は、現在のウィンドウ番号を保存してから:copenコマンドを発行することです。アクティブなウィンドウ番号が変更された場合、クイックフィックス リストではなくロケーション リストに表示されていました。変わらない場合は、既にクイックフィックス リストに含まれています。

また、開いているウィンドウの数を保存し、それを新しい開いているウィンドウの数と比較します。その後、まだ開いていない場合は、クイックフィックス ウィンドウを閉じることができます。

最後に、保存されたウィンドウ番号と を使用して、ロケーション リストに戻ることができます (必要な場合) wincmd w

于 2013-09-03T16:20:04.607 に答える