Bash オートコンプリートに vim コマンドを使用する

Bash オートコンプリートに vim コマンドを使用する

vimBashでは、2つのディレクトリよりも深いパスを含むコマンドを実行すると、最近のパスオートコンプリート機能が機能しなくなりました(およびls他のコマンドの場合は予想どおりに機能し続けましたcd)。

たとえば、入力ls .config/btsync/btしてTABを押すとls .config/btsync/btsync.conf

を入力してvim .config/btTABを押すvim .config/btsync/

ただし、入力してTABを押すと何も起こりません。 (上記の例のようvim .config/btsync/btに拡張したいと思います。vim .config/btsync/btsync.confls

私のユーザーとして実行するときとsuで実行するときに同じ問題があります。

私は読んだこの投稿以前のバージョンのbash-completion関連の問題が言及されていますが、2.1-5を実行しています。

アップデート:いくつかの追加テストを経た後の根本的な問題はbashですただファイル名ではなく、完全なディレクトリ名です。

bash-completionアップデート:これが全体的な理由であることがわかりました。許可された回答についての2番目のコメントを参照してください。

この動作の潜在的な原因について提案をいただきありがとうございます!

答え1

私はあなたのためにもう少し調査した結果、これが私が見つけたものです。オートコンプリートの鍵はコマンドbashですcomplete。使用ルールを印刷できますvim

complete -p vim

繰り返しますが、次の方法でこれらの特定のルールを削除できます。

complete -r vim

このコマンドはそれをデフォルト値(追加のロジックなしで一般的なパスとファイル名の完成)にリセットします。これはあなたが望むものかもしれません。

詳細については、コマンドのセクションを確認help completeまたは参照してください(bash組み込み機能なので、bashのマンページに文書化されています)。man bashcomplete

bash最後の注意 - ログインするたびにvimルールを削除したい場合は、上記の変更は現在のセッションにのみ影響complete -r vimします~/.bashrc

役に立ったことを願っています:)

答え2

Bashはデフォルトでパスとファイル名のみをオートコンプリートします。しかし、メカニズムは拡張可能であり、bashはさまざまなプログラムに対してさまざまなオートコンプリートを実行するように教えることができます。たとえば、gitパス名だけでなく、サブコマンド名(レプリケーション、コミット)とリビジョンも自動補完できます。拡張子なしでファイル名をgzip -d自動補完することを拒否する場合など、便利な場合もありますが、迷惑な場合もあります。.gz

Bashの完成は通常、以下で構成されています。ここで呼ばれるファイルを見つけることが/etc/bash_completion.dできます。vimこのファイルには、コマンドvimラインのオートコンプリートルールが含まれています。

今、2つのオプションがあります。

  1. ユーザーが期待どおりにファイルをオートコンプリートパスに変更します。
  2. 特別なルールを無効にしvimてデフォルトパスのオートコンプリートのみを実行するには、このファイルを削除してください。

もちろん、今後のリリースで修正されるように問題を説明するバグレポートも送信してください。 :)

答え3

bash コンプリートを再インストールすることもできます。 apt-get install --reinstall bash-completion

/etc/bash.bashrcファイルを見てください。 nano /etc/bash.bashrc

そして、次の行のコメントが完全に削除されていることを確認してください。

if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

その後、端末セッションを再開します。

関連情報