
私のシステムの詳細: Asus ラップトップにインストールされた Windows 8.1 から、Oracle Virtual Box 4.3.6 で Ubuntu 12.04.4 LTS を実行しています。bash_completion バージョン 1.3 リリースを使用しています (/etc/bash_completion ファイルのコメントから取得しました)
私は、bash はコマンドの後にファイルとディレクトリを常に自動補完すると思っていました。しかし、Google 検索で bash_completion についてさらに調べたところ、これはコマンドによって異なることがわかりました。しかし、別の方法で を呼び出すときに、bash のこの自動補完機能に問題が発生していますemacs -nw
。
ee
ファイル内で関数として定義しました~/.bash_aliases
。これはエイリアスではないことはわかっていますが、エイリアスと同じことを関数を使って実行しているだけです。
function ee () {
emacs -nw "$@"
}
export -f ee
tab
ファイル名の一部を入力すると、ee 関数による補完を使用できると思っていました。これは機能しないようです。一方emacs -nw
、 に続けてファイル名の一部を入力すると、タブ補完は完璧に機能します。何が欠けているのかまったくわかりません。コマンドの出力を確認したところ、と のcomplete -p
両方で次のようになりました。emacs
ee
eakangk@eakan-u-vbox:~$ complete -p | grep 'ee'
complete -F _filedir_xspec ee
eakangk@eakan-u-vbox:~$ complete -p | grep 'emacs'
complete -F _filedir_xspec emacs
ということは、自動補完を試みると、両方のコマンドが同じ種類の動作をするはずではないでしょうか? 編集:質問を投稿したときには、ファイルee
内の行を見ていませんでし/etc/bash_completion
た。しかし、今はそこにあることがわかりました。ただし、/etc/bash_completion ファイルには次の行があります。
complete -f -X '!*.@(gif|jp?(e)g|miff|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|pcx)' ee
complete -f -X '*.@(o|so|so.!(conf)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
ここで何が間違っているのでしょうか?
答え1
これは、bash 補完パッケージ。emacs 用のカスタム補完セットがいくつかあり、コマンド名が異なると、どうやら同じ補完が失敗するようです。
私自身は bash-completion を使用していませんが、ソースをざっと調べたところ、次のことがわかりました。
_install_xspec '*.@(o|so|so.!(conf|*/*)|a|[rs]pm|gif|jp?(e)g|mp3|mp?(e)g|avi|asf|ogg|class)' vi vim gvim rvim view rview rgvim rgview gview emacs xemacs sxemacs kate kwrite
これはおそらく、「これらのコマンドでは、.gif、.mp3、.avi などで終わるファイルを補完しないでください」という意味で使用され、ee コマンドに _install_xspec 行がない場合、何も補完されないと推測します。
_install_xspec 関数を見ると、この関数は単に_xspecs
コマンド名をキーとして名前の付いた連想配列にこれらの値を格納するだけなので、 を実行すると_xspecs[ee]=${_xspecs[emacs]}
、ee コマンドは emacs と同じ補完を取得するはずです。