vimを使用してプログラムを作成するときに、vimが関数名、変数などを自動補完することは可能ですか?


56

多くのIDEは、ユーザーが入力すると関数名、変数、メソッド名などを自動的に補完します。最良のものは、言語の組み込みライブラリと、同じプログラムの他のファイルですでに定義されているものの両方に基づいて名前を完成させます。

たとえば、次のPythonプログラムを入力しているとき:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

eatFeatFood()使用可能なオートコンプリートオプションとして自動的に表示されます。

Vimにはこの機能がありますか?もしそうなら、どうすればそれを有効にできますか?

回答:


42

vimにはオートコンプリートのさまざまなフレーバーがあります。1つの方法は、SuperTabを使用することです。これにより、いつでもタブ補完を使用できます。これによりTab、単語を部分的に入力して完了リストを取得した後にヒットできます。たとえば、次のように入力eatFTabて展開しますeatFood.

:これらの写真はすべて、動作中のgifの例にリンクしています。

スーパータブ補完

Vimには他にも優れたオプションがあります。:h ins-completionさまざまな組み込みの補完オプションを確認する必要があります。Vimのを使用するCtrl- XCtrl- Oなどのpython-意識のプラグインと組み合わせジェダイ完了の風味を与えることができます。ジェダイはオムニ補完のドキュメントを与えるように構成することができる(これは何ですかCtrl- XCtrl- Oありません)。次に、補完候補のドキュメントが分割ウィンドウに表示されます。

ctrlxctrloの完了

同様のプラグインを使用しますが、異なるオプションを使用すると、あらゆる種類の動作が発生します。たとえば、オートコンプリートのプロンプトを表示する必要がない可能性があります(それが目的の場合)。代わりに、単語のいくつかの文字(たとえば2または3)を入力した後、プラグインはメニューで可能な補完をインテリジェントに提供しようとすることができます。

ここに画像の説明を入力してください

短い答えはイエスです!ただし、構成プロセスは少し複雑になる場合があります。私はそれをvimをマスターする長い階段のステップと考えています。


すべて試してみましたが、いつもSuperTabに戻ります。
craigp

1
また、私はYouCompleteMeプラグインが本当に好きです。これは、入力したとおりに提案し、提案を選択または無視できるからです。はい、視覚的には無視するのは難しいですが、キーストロークが少なくて済むため、私のワークフローには非常に邪魔になりません。
スライブス

3
アニメーションをgifアニメーションにリンクしているという意味で、「クリック時」に変更しました。
-davidlowryduda

1
依存関係をインストールするルートがないため、仕事用コンピューターでYouCompleteMeを使用できません。SuperTabが次善の選択です。
チャールズクレイトン

@mixedmath私の場合、superTabは機能しません。
-alhelal

24

このような機能-つまり、現在のファイル(および開いているすべてのファイル)でオートコンプリートを検索することは、デフォルトで有効にする必要がありますCtrl+P

使用中のオートコンプリートのスクリーンショット

n extの提案に移動しCtrl+Npの前の提案でCtrl+P、任意の文字を入力して選択できます(提案の直後に追加されます)。


1
編集者(Jasper)に:将来書いたりファイルの先頭に書いたりするものではなく、最近書いたものをもう一度書きたいと思うでしょう。したがって^P、より自然な私見です。それ以外の場合は、編集に感謝します(右のボタンをクリックすると、+ 2が表示されます)。
yo

1
ええ、私はそれらの架空のインターネットポイントを取得しました:)提案リストはアルファベット順にソートされるといつも思ってい
ジャスパー

外観の@Jasper順序です(少なくとも私にとっては確かに、上記も参照してくださいworld,word,wood。逆ではありません)。だから、^P非常に便利である最後に使用完了は、(私はめったにでも長いファイルでは、さらに、リスト内の3つの項目よりも行くん)です。
yo

protip:inoremap <C-Space> <C-N>
wchargin

20

Vimはネイティブで補完をサポートしています。Vimがサポートしているさまざまな補完について読むことができます:h ins-completion

一般に、私が見つけたすべての目的のために、ins-completionsは私の好みに十分ですが、ins-completionsが提供するものよりもさらに価値を追加するいくつかの完了プラグインがあります。NeoCompleteYCM(YouCompleteMe)は同じものです。異なるタイプの補完をより正確に組み合わせようとするという意味でより高度であり、高度なキャッシングメカニズムも備えているため、より高速になる傾向があります。YCMは、外部のコンパイラ/ユーティリティと連携して、より優れたIntelliSenseを提供することさえ可能です。


9

はい、vimの自動補完スクリプトが存在します。「最良の」選択は、プログラミング言語に依存します。サンプルコードがPythonであるため、Jediをご覧になることをお勧めします。その上に構築するあなたは私を完成させます。これは他の言語もサポートしていますが、大きすぎると見られることもあります。他の言語については、vimスクリプトの長いセットを参照できます。


7

挿入モードで、単語の最初の数文字を入力してから、次を押します。

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

これは、プログラムに変数の名前を入力するときに特に役立ちます。

'complete'オプションは、キーワードの検索場所(インクルードファイル、タグファイル、バッファーなど)を制御します。

「completeopt」オプションは、補完の実行方法を制御します(たとえば、メニューを表示するかどうか)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.