私が好きなエディタmgのエイリアスeeを定義しました。私が何かをするとき
mg fo
その後、タブをクリックしたときにfooファイルがある場合は、タブ補完が表示されます。
mg foo
私が使ったほとんどのシステム(例:過去数年間のすべてのUbuntuバージョンといくつかのDebianのインストール)で
ee fo
やっぱりちゃんとした
ee foo
しかし、私が使用している限り、Debian 6.0およびGNU bash 4.1.5(1) - リリースを含むシステムでエイリアスがあるバージョンでは、タブの完成は失敗します。これはいいえエイリアス自体を完成させるのに問題があります。 - エイリアスの完成に問題があります。議論エイリアスコマンド。 Debianシステムでこの動作を修正する方法はありますか? Bash 4.2.xにアップグレードしますか?設定ファイルを操作していますか?
答え1
編集:わかりました。私は状況を誤って判断したようです。プログラムオプションは次のように思われました:
$ mplayer_alias -pla<tab><tab>
-playing-msg -playlist
$
しかし、ファイルの完成だと思います。よくわかりませんが、一度試してみてください。
クイック修正で次のように動作します。
complete -f -o default ee
与える:
$ ee<tab><tab>
file1 file2 file3
$
〜のように組み込み機能のプログラム可能な完成。たとえば、-X pattern
便利です。たとえば、除外.swp
と.swo
ファイルは次のようになります。
complete -f -X '*.sw[op]' ee
のみ表示.zip
、.ZIP
:
complete -f -o default -X '!*.+(zip|ZIP)' my_unzip_alias
shopt -s extglob
一部は設定ファイルに追加する必要があります。
前の答え:
でこれを行うことができます.bash_completion
。
少なくともスターターとして。
重要なアイデアは、complete
既存のスクリプト全体を使用してエイリアスを追加することです。本物プログラム。ここでは、すべて次の形式であると仮定します。
complete -F _complete_function_from_original program_name
次のコマンドを実行して、それが何であるかを判断できますcomplete -p program_name
。まず確認するのが最善です。
一部の方法では、たとえば、apt-get
エイリアス+ロードのみを使用できます。
_load_comp_hack apt-get myalias
それ以外の場合は、mplayer
次の関数ラッパーが必要です。
myalias() { mplayer "$@"; }
|
+--- Could be messy
この問題を解決するより良い方法があるかもしれませんが、私はうまくいきます。私は主にプログラムの機能を拡張するラッパースクリプトに主に使用します。まだエイリアスに使用していません。
私はこのハッキングは安全だとは思わないが、動作していることを確認することができます。
_load_comp_hack()
{
local cc=
# Make sure completion scripts are sourced.
# Report error if source fail.
if . "/usr/share/bash-completion/completions/$1" >/dev/null 2>&1; then
# Extract the completion function used by the "real" program.
if cc="$(complete -p "$1" | cut -d' ' -f3)"; then
# Add it to the alias
complete -F "$cc" "$2"
return 0
fi
fi
echo "bash-completion '$1' for '$2' not found."
}
_load_comp_hack mplayer mplad
_load_comp_hack apt-get z
| |
| +----- Alias, script or function
+------------- Real function
_longopt
一部のプログラムは、ソースファイルが見つからないより一般的な完成機能を使用します。一般に、ソースも必要ないので、より単純なバリエーションは次のとおりです。
_load_comp_hack()
{
local cc=
if cc=$(complete -p "$1" | cut -d' ' -f3); then
complete -F "$cc" "$2"
fi
}
IIRC、ここでの1つの問題は、いくつかの完了スクリプトが最初の実行のように最初に実行されるまでロードされないことですprog
tabtab。あるいは、else
ファイルソースが失敗した場合は追加できます。
答え2
問題は、bash-completionがエイリアスを理解していないことです。したがって、エイリアスを作成すると、不明なコマンドとして処理され、オートコンプリートされません。必要に応じて、デフォルトのファイル名の完成に戻ることができます。または、以下をインストールできます。プログラムオートコンプリートの前にエイリアスを拡張し、エイリアスコマンドでエイリアスを完成させます。