web-dev-qa-db-ja.com

emacsの関数を作成すると、bashのオートコンプリート機能が機能しません

システムの詳細: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について詳しく読んだ後、これはコマンドによって異なることがわかりました。しかし、emacs -nwを呼び出す別の方法を使用すると、bashのこの自動補完機能に関する問題に直面しています。

~/.bash_aliasesファイルでeeを関数として定義しました。私はこれがエイリアスではないことを知っていますが、エイリアスを使用して関数を使用しています。

function ee () {
    emacs -nw "$@"
}

export -f ee

部分的なファイル名を入力した場合、ee関数でtab補完を使用できると考えました。これはうまくいかないようです。一方、emacs -nwの後にファイル名の一部を入力すると、タブ補完が完全に機能します。ここで何が欠けているのか本当に理解できません。コマンドcomplete -pの出力を確認したところ、emacseeの両方について次の結果が得られました。

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

それは、オートコンプリートを試みるときに両方のコマンドが同じ種類の動作を私に与えるべきだという意味ではないでしょうか?編集:質問を投稿するときに、/etc/bash_completionファイルにee行が表示されていませんでした。しかし、今ではそこにあることを知っています。ただし、/ 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

ここで何が間違っていますか?

これは bash-completion パッケージと関係があります。 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などで終わるファイルを完成させないでください」と言うのに使用されます。 。

_install_xspec関数を見ると、コマンド名をキーとして使用して、これらの値を_xspecsという名前の連想配列に配置するだけです。したがって、_xspecs[ee]=${_xspecs[emacs]}を実行すると、eeコマンドはemacsが取得するのと同じ補完を取得する必要があります。

3
geirha