私は現在、Vimでの補完にsuperTabを使用しています。ただし、完成はもっとbashのようにしたいと思います。たとえば、入力している場合
st
可能な完了は
struct, string
Tabキーを押すとstrまで完了し、理想的には完了可能なメニューを表示したいと思います。
プラグインはOKです。
次のプラグインはあなたが求めていることを実行すると思います:
YouCompleteMe
説明から:
YouCompleteMeは、Vim用の高速で入力どおりのあいまい検索コード補完エンジンです。 2つの補完エンジンがあります。すべてのプログラミング言語で動作する識別子ベースのエンジンと、C/C++/Objective-C/Objective-C++のセマンティックコード補完を提供するセマンティックClangベースのエンジンです(以降、「 Cファミリー言語」)。
パッティングset completeopt=menu,longest
は、ほとんどの場合、トリックを実行することが判明しました。残念ながら、さらにテキストを入力してからTabキーを押すと、次に長い共通プレフィックスを指定する代わりに、完全に完了しようとします。
アレクサンダーの答えに基づいて、私は私の.vimrcにこれらの行のようなものを持っています
"unix like completion - longest substring
set completeopt+=longest
"add command to retrigger longest substring
"Naive version... see below
inoremap <C-m> <C-e><C-n>
したがって、「最長」ビットがほとんどの作業を実行しますが、その後の<C-n>
の押下は、オプションの循環を開始するだけです。オートコンプリートを行う<C-e>
を押すと、<C-n>
で再度トリガーすると、次に長い部分文字列と一致します...そのショートカットを追加すると、2つのキーを押す必要がなくなります..。
それを<C-n>
にバインドしたくないのは、慣れ親しんだ方法でサイクリングを停止するからです。
Nのすぐ隣にあるMを選択し、チェック(:h insert-index
)はデフォルトでsame as <CR>
....にバインドされているだけです。これはvimであり、簡単なことは何もないため、これは次のことを意味します。 vimは実際にはできません 2つのキーを押すことを区別します !
<C-m>
の使用を気にしない場合は、他のものを選択してください。それ以外の場合は、以下をお読みください...
他の投稿に基づいて、下部の回答を調整し、構文を少しクリーンアップしました( this に基づく)
私はこれで終わった:
"add command to retrigger longest substring
inoremap <expr> <C-M> pumvisible() ? "\<C-e><C-n>" : "\<C-m>"
pumvisible()は、ポップアップメニューが開いているかどうかを示すフラグを返します。これにより、ポップアップメニューが開いていないときに、挿入モードでのEnterキーの動作を変更できなくなります。
残念ながら、?のドキュメントが見つかりません。と:そしてなぜ文字列を渡さなければならないのか。