Vimのオートコンプリート後にプレビューウィンドウを自動的に削除するにはどうすればよいですか?


91

私は使用していomnifunc=pythoncompleteます。単語(例:)をオートコンプリートするとos.<something>、適格なクラスメンバーと関数のリストが期待どおりに表示され、選択したメンバーまたは関数に関するドキュメントが記載されたスクラッチバッファープレビューウィンドウも表示されます。これはすばらしいですが、必要な機能を選択した後、プレビューウィンドウは残ります。

私はそれを取り除くことができます :pcが、Eclipseの関数を選択した後、自動的に消えるようにしたいです。私は遊んでみましcompleteoptたが、役に立ちませんでした。


8
良い質問-愚かなバッファを開いたままにしていたため、omnicompleteの使用をやめました。
Wayne Werner

回答:


106

以下をvimrcに入れてください:

" If you prefer the Omni-Completion tip window to close when a selection is
" made, these lines close it on movement in insert mode or when leaving
" insert mode
autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
autocmd InsertLeave * if pumvisible() == 0|pclose|endif

2
これは私にとってコマンド編集ウィンドウを壊すようです(q:またはq /)。&& bufname( "%")!= "[Command Line]"を両方の行に追加しました
Ben

2
@ベン:わあ、この質問を投稿する前にコメントが表示されなかったのはなぜですか。私がそこから得た答えは、に変更pcloseすることsilent! pcloseでした。
idbrii

1
gotgenesとpydaveの両方に感謝します。あなたのトリックは完璧に機能します!
Lubulos 2012

73

すでに受け入れられた回答がありますが、この問題を抱えているすべてのプラグインで機能するドキュメントから直接これを見つけました。

autocmd CompleteDone * pclose

15
CompleteDoneバージョン7.4で追加されました。この方法はCursorMovedI/ InsertLeaveアプローチよりも推奨されます。
Peter Rincker、2015年

7
@PeterRincker(引数を入力しているときにドキュメントを見たいので)完了時にウィンドウが閉じないようにしたいので、このInsertLeave行を使用します。
DBedrenko

19

supertabプラグインがインストールされている場合は、というオプションがありますsupertab-closepreviewonpopupclose

以下を.vimrcに入れてください:

let g:SuperTabClosePreviewOnPopupClose = 1

16
YouCompleteMeプラグインにag:ycm_autoclose_preview_window_after_insertionオプションがあるというヒントなので、私はこの回答を賛成します。
duleshi 2014

@duleshiまさに私が探していたもの!
アンディヘイデン

@AndyHayden喜んでお手伝いできます!それが私がコメントを残した理由です!
duleshi 2014年

@duleshiにも感謝します。
デビッドウッズ

9

自動的に閉じる方法はわかりませんが、次のように入力できます

:pclose

スクラッチプレビューを手動で閉じます。


1

次のマッピングをスローして、特定のキーでプレビューウィンドウを閉じてみることができます。

inoremap <space> <C-O>:wincmd z<CR><space>
inoremap ( <C-O>:wincmd z<CR>(
inoremap ) <C-O>:wincmd z<CR>)
inoremap , <C-O>:wincmd z<CR>,
inoremap <CR> <C-O>:wincmd z<CR><CR>
inoremap <esc> <esc>:wincmd z<CR>

挿入モードでの作業が終了したら、オートコマンドを使用してプレビューウィンドウを閉じることもできます。

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end

1

私はこの質問が非常に古いことを知っていますが、「クリーン」な解決策を探して何日か経った後、私はちょうど仕事をするCompleteDone自動機能を見つけました:

au CompleteDone * pclose

0

次のように入力できます.vimrc

set completeopt-=preview

もっと説明してください。
Wtower

1
これは実際には質問の答えにはなりません。これにより、プレビューウィンドウがポップアップ表示されなくなり、完了後に閉じられなくなります。OPは「completeopt」も試したと言っていることに注意してください。
nerdwaller 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.