改行文字を挿入せずに vim オートコンプリートリストから項目を選択します。

改行文字を挿入せずに vim オートコンプリートリストから項目を選択します。

vimのやや面倒な機能は、挿入モードでオートコンプリート(Ctrl-N)を実行し、目的の項目に対して下矢印キーを押してEnterを押すと、その項目は挿入されますが、Youも挿入されます。改行文字が必要です。その後、削除する必要があります。

不要な改行を追加せずにオートコンプリートリストからアイテムを選択する方法はありますか?

答え1

これは現在ポップアップメニューの状態によって異なります(参照:help popupmenu-completion)。あなたの質問はあなたがステータス2にあることを理解しています(完了を見つけるために矢印キーを押したためです)。ただし、Enter状態2のデフォルトの動作は、改行なしで完成を挿入することです。説明する内容は通常状態 1 の動作です (つまり、Ctrl+ N/ Ctrl+ を使用する場合P)。

すべての状態で一貫して作業する1つの方法は、Ctrl+を使用することですY。私はYが「はい、みことばを受け入れなさい」を意味することを覚えておきたい。 geedoubleyaの答えのようにコンテンツを再マップしない限り、単語全体の後にテキスト入力を開始することも可能です。

同じ文脈でCtrl+を押してEメニューをキャンセルし、メニューが呼び出される前のテキストを保持できます。他の状況でCtrl+ECtrl+のペアを使用することに慣れている場合Y(通常モードで上下にスクロールするか、挿入モードでカーソルの下または上に文字を挿入するなど)、この方法を念頭に置く1つの方法です。 。 「出る」メニューやそれと似ていると思うかもしれません。

もっと見る:help popupmenu-keys

答え2

私は個人的にこれを使用します:

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プラグインこのマッピングは便利です。

答え3

私はこれが古いことを知っていますが、echristophersonの答えは有益で素晴らしいですが、誰もが速くて汚い解決策をしたい場合は、geedoubleyaの答えをやや賛成します。

inoremap <expr> <cr> ((pumvisible())?("\<C-y>"):("\<cr>"))

答え4

矢印キーを使用する代わりにjkキーを使用してオートコンプリートリストをスクロールできます。

これにより、スクロール時に選択した単語と一致するように現在の行が変更されます。

したがって、代替単語の末尾にカーソルがまだ挿入モードにあるので、Enterを押す必要はありません。

これを有効にするには、以下を.vimrcに追加します(Stackoverflowの他の人のおかげで):

inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))

または、矢印キーを使用する代わりにCtrl-nオプションを繰り返しCtrl-p(戻る)、現在の行を移動するときに置き換えることもできます。Entervim キーマッピングは必要ありません。

関連情報