私は使うニックネーム一部のプログラムにいくつかのパラメータを追加します。
たとえば、
alias git.home='git --git-dir=$HOME/.git.home/'
complete -o bashdefault -o default -o nospace -F _git git.home \
2>/dev/null || complete -o default -o nospace -F _git git.home
bash-completion v.1:2.0-1
(「debian 7 wheezy」)で動作します:完全な
tabパラメータとオプションニックネーム git.home
そして「原本」git
。
しかし、(「debian 8 jessie」)を入力して押すと、bash-completion v.1:2.1-4
次のエラーが表示されます。git.home
tab
bash:完了: '_git'関数が見つかりません。
git
最新バージョンのパッケージで既存の完成(for)を再利用するにはどうすればよいですかbash-completion
?
修正する
部分的な解決策を探す:source /usr/share/bash-completion/completions/git
以前に実行complete ...
しかし、別のエラーが発生します。 - git.home log
+ space+tab結果:
致命的:gitリポジトリ(または親ディレクトリ)ではありません:.git HEAD
ベストアンサー1
最新バージョンのbash-completionパッケージ(gitなど)で既存の完成を再利用する方法
次の行を次の行に追加します~/.bashrc
。
_completion_loader git
eval $(complete -p git | perl -pe 's/(\s)git$/$1git.home/')
説明する:
bash-completion
これは動的ローディングを使用して行われます。1.90。したがって、 をgit
入力するまで compspec は使用できませんgit
。SpaceTab
努力する:
bash
complete -p git # bash: complete: git: no completion specification
git<space><tab>
complete -p git # complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git
_completion_loader git
模倣git
, Space, Tab(つまり、ロードされた compspec git
)
complete -p git | perl -pe 's/(\s)git$/$1git.home/'
次のためのcompspecビルド(aのcompspecをgit.home
置き換える)git
git.home
git
eval
生成された compspec を実行します。
タイプgit.home
、、、。Spacep
Tabあなたは見なければなりません:
popt pull push
しかし、 git.home log
、、Space生産するTab:
致命的:gitリポジトリ(または親ディレクトリ)ではありません:.git HEAD
このメッセージはgit完了エラーの結果です。アップストリームに修正があります。完了:「致命的:gitリポジトリではありません」エラーを停止します。
もう一つの質問のようです:)
_githome(){
GIT_DIR=$HOME/.git.home
complete -o default -o nospace -F _git git.home
}
期待どおりに動作しません。GIT_DIR
現在のセッションに設定しました。回避策を試してください。
bash
git clone git://git.debian.org/git/bash-completion/bash-completion.git ~/bash-completion
cd ~/bash-completion
git log<space><tab> # completion for current repo
git.home log<space><tab> # completion for GIT_DIR
git log<space><tab> # completion for GIT_DIR