Bashでは、パスが2つのディレクトリよりも深いvim
コマンドを発行すると、パスのオートコンプリートが最近機能しなくなりました(ls
やcd
)。
たとえば、ls .config/btsync/bt
と入力してTabキーを押すと、ls .config/btsync/btsync.conf
に展開されます。
「vim .config/bt
」と入力してTabキーを押すと、vim .config/btsync/
に展開されます。
ただし、vim .config/btsync/bt
と入力してTabキーを押しても、何も起こりません(上記のls
の例のように、vim .config/btsync/btsync.conf
に展開されるはずです)。
自分のユーザーとして実行する場合とsuとして実行する場合に同じ問題が発生します。
私は この投稿 を読みましたが、これは古いバージョンのbash-completionの問題について言及していますが、2.1-5を実行しています。
更新:いくつかの追加テストの後、根本的な問題はbashがファイル名ではなく完全なディレクトリ名のみになることであることがわかりました。
更新:bash-completion
が全体的な原因であることがわかりました。受け入れられた回答に関する2番目のコメントを参照してください。
この動作の潜在的な原因に関する提案はありがたく受け取られます!
私はあなたのためにもう少し調査しました、そしてここに私が見つけたものがあります-自動補完の鍵はbash
コマンドcomplete
です。以下を使用して、vim
のルールを印刷できます。
complete -p vim
同様に、これらの特定のルールを次のように削除できます。
complete -r vim
このコマンドは、デフォルトにリセットします。通常のパスとファイル名は、追加のロジックなしで補完されます。それはおそらくあなたが望んでいることです。
詳細については、help complete
またはman bash
を確認し、complete
コマンドに関するセクションを探してください(これはbashの組み込みなので、bashのマンページに記載されています)。
最後の1つのポイント-上記の変更は現在のbash
セッションにのみ影響します。ログインするたびにcomplete -r vim
を~/.bashrc
に追加した後にvimルールを削除する場合は、.
それが役に立てば幸い:)
デフォルトでは、bashはパスとファイル名のみをオートコンプリートします。ただし、メカニズムは拡張可能であり、bashは異なるプログラムに対して異なるオートコンプリートを実行するように教えることができます。たとえば、git
の場合、パス名だけでなく、サブコマンド名(クローン、コミット)とリビジョンをオートコンプリートできます。便利な場合もあれば、非常に煩わしい場合もあります。たとえば、gzip -d
が.gz
拡張子を持たないファイル名のオートコンプリートを拒否する場合などです。
通常、bash補完は/etc/bash_completion.d
で構成されます-おそらくvim
というファイルがそこにあります。これは、vim
コマンドラインのオートコンプリートルールを含むファイルです。
今、あなたは2つのオプションを持っています:
vim
ルールを無効にし、デフォルトのパスのオートコンプリートのみを実行します。そしてもちろん、将来のバージョンで修正されるように、問題の概要を示すバグレポートを提出してください:)
おそらくbash-completionを再インストールできますか: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
次に、ターミナルセッションを再起動します。