Vimのかなり厄介な機能は、挿入モードでオートコンプリート(Ctrl-N)を実行し、矢印キーを使用して目的のアイテムまで移動し、Enterキーを押すと、アイテムが挿入されますが、改行も挿入されます。その後、削除する必要があります。
不要な改行を追加せずにオートコンプリートリストから項目を選択する方法はありますか?
現在のポップアップメニューの状態によって異なります(:help popupmenu-completion
)。質問から、状態2であることがわかりました(完了を見つけるために矢印キーを押したため)。ただし、デフォルトの動作 Enter 状態2では、改行なしで補完を挿入します。あなたが説明するのは通常、状態1の動作です(これは Ctrl+N/Ctrl+P。)
すべての州で一貫して機能する方法は、 Ctrl+Y。私はYを「はい、その言葉を受け入れます」を表すものとして覚えたいです。 geedoubleyaの答えのように再マッピングしない限り、完成したWordの後に続くテキストを入力し始めることも可能です。
同じコンテキストで、あなたは押すことができます Ctrl+E メニューをキャンセルし、テキストを呼び出し前の状態のままにします。のペアリングに慣れている場合 Ctrl+E そして Ctrl+Y 他のコンテキスト(たとえば、通常モードで上下にスクロールする、または挿入モードでカーソルの下または上に文字を挿入する)では、これをここで覚えておく方法の1つです。メニューを「終了する」などと考えることもできます。
見る :help popupmenu-keys
多くのための。
個人的に私はこれを使います:
inoremap <expr> <TAB> pumvisible() ? "\<C-y>" : "\<CR>"
inoremap <expr> <Esc> pumvisible() ? "\<C-e>" : "\<Esc>"
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<Up>"
CtrlPプラグイン を使用する人なら誰でも、このマッピングが便利だと思うかもしれません。
矢印キーを使用する代わりに、j
&k
キーでオートコンプリートリストをスクロールできるようにします。
これを行うと、現在の行がスクロールして選択したWordに一致するように変更されます。
したがって、置換されたWordの末尾でカーソルがまだ挿入モードであるため、Enterキーを押す必要はありません。
これを有効にするには、これを.vimrcに追加します(stackoverflowで他の人に感謝します)。
inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))
別に、矢印キーを使用する代わりに、Ctrl-n
オプションを悪用します(Ctrl-p
逆方向に移動します)、現在の行が移動するときに置き換えます。Enter
またはvimキーマッピングは必要ありません。
私はこれが古いことを知っていますが、geedoubleyaの答えを裏付けているようなものです。
inoremap <expr> <cr> ((pumvisible())?("\<C-y>"):("\<cr>"))