2

検索して、cloeset回答フォームを取得しましたVimの別のウィンドウにカーソルを移動した後、プレビューウィンドウを自動的に閉じるにはどうすればよいですか?。ただし、taglistプラグインでは正しく機能しないことがわかりました。

上記のリンクから取得したコードは次のとおりです。

autocmd WinLeave * pc

autocmd WinLeave * call ClosePreviewWindow()
function ClosePreviewWindow()
    if &pvw
        pclose
    endif
endfunction

autopreviewというvimプラグインを使用しています。通常、ptagコマンドを呼び出してプレビューウィンドウを開き、バッファウィンドウに戻ります。これが問題です。バッファウィンドウからプレビューウィンドウにジャンプして戻ると、WinLeaveイベントが2回トリガーされ、開いた直後にプレビューウィンドウが閉じます。だからそれは決して現れませんでした。WinLeaveをTabLeave/BufLeaveに置き換えようとしましたが、他の問題が発生しました。それで私は助けを求めてここに来ました。

更新:
たぶん私はtabclose / qaコマンドを使用する必要がありますか?

4

1 に答える 1

2

WinLeaveの代わりにWinEnterイベントを使用してみましたか?ハンドラーで、プレビューウィンドウに入っているかどうかを確認し、入っていない場合は何もしません。そうでない場合は、プレビューウィンドウが開いているかどうかを確認し、必要に応じて閉じます(上記のコードのように)。

編集

説明に基づいて、これを機能させるには、のウィンドウがプレビューウィンドウであったかどうかを確認する必要があります。このスニペットは次のことを示しています。

if getwinvar(winnr("#"), "&pvw") == 1
    " do stuff, e.g. pclose
endif

つまり、「前のウィンドウのオプション値pvw(たまたまウィンドウローカル)を取得してください」ということです。ここwinnr("#")で、前のウィンドウのウィンドウ番号が示されます。

于 2012-04-11T07:27:10.103 に答える