多くの場合、ファイル名(現在のディレクトリでタブを完了できる唯一のファイル)をコマンドの前に渡し、複数のタブを(間違って)押すと、同じファイル名が複数回完了し、削除またはキャンセルして再起動しました。
別のファイルを作成または非表示にせずにこの動作を無効にする方法はありますか?
ls <Tab>filename <Tab>filename <Tab>filename
答え1
nospace
1つの解決策はオプションを使用することです。complete
組み込み。
まず、完成を定義する方法を知る必要があります。ls
$ complete -p ls
complete -F _longopt ls
その後、追加して修正します。-o nospace
$ complete -o nospace -F _longopt ls
したがって、複数回押してもTab ↹一致するものはなく、コマンドラインにパラメータは追加されません。
副作用:に他のパラメータを追加するには、行の末尾にスペースを手動で追加する必要がありますls
。
これらの副作用を避けるために、_longopt
関数を変更して同じ引数が2回一致しないようにすることができます(これはマイナーな作業ではないかもしれません)。
他のコマンドに適用して永続的にする方法
一致の後に末尾のスペースを追加するのがデフォルトの動作です。-o nospace
指定されたコンプリートルールを使用するときに使用する以外に他の方法があるかどうかわかりませんcomplete
。
また、組み込みコマンドに対しても完了ルールがどこかに指定されていることに注意してください(私のラップトップのこのフォルダにあります)/usr/share/bash-completion
。ファイルを見ると、/usr/share/bash-completion/bash-completion
完成が定義されている場所を見ることができますls
。
complete -F _longopt a2ps awk base64 bash bc bison cat chroot colordiff cp \
csplit cut date df diff dir du enscript env expand fmt fold gperf \
grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
texindex touch tr uname unexpand uniq units vdir wc who
同じ規則がさまざまなコマンド(たとえばcp
、、mv
... rm
)に適用されるため、追加して変更すると、変更は他のすべてのコマンド-o nospace
に影響します。ls
グローバル設定を変更するのが不便な場合(rootアクセスが必要です)、次の~/.bash_completion
ように書くことができます(存在しない場合はこのファイルを作成します)。
complete -F _longopt -o nospace a2ps awk base64 bash bc bison cat chroot colordiff cp \
csplit cut date df diff dir du enscript env expand fmt fold gperf \
grep grub head irb ld ldd less ln ls m4 md5sum mkdir mkfifo mknod \
mv netstat nl nm objcopy objdump od paste pr ptx readelf rm rmdir \
sed seq sha{,1,224,256,384,512}sum shar sort split strip sum tac tail tee \
texindex touch tr uname unexpand uniq units vdir wc who
/usr/share/bash-completion/bash-completion
ここにリストされていない他のコマンドの完成を修正するには、ファイルまたはフォルダでそのコマンドを見つけます/usr/share/bash-completion/completions
。