Gitの完了:
私のシステムでgitのファイル名のオートコンプリートに問題があります。私が使用しているzsh
と(5.0.5)git
OS X(10.9.3)に(1.9.3)。両方zsh
とgit
homebrew経由でインストールされています。(フルバージョンの出力は、投稿の下部にあります。)
git
のファイル名の補完では、期待どおりにスペースが挿入されません。名前にスペースを含むファイルの名前を入力すると、シェルはスペースをエスケープせずにファイル名を挿入します。zsh
の組み込み補完ではこれは行われませんが、で行われgit
ます。
これが私が見ているものの例です。
名前にスペースが含まれるいくつかのファイルを含むリポジトリがあります。
% ls -la
test
test four - latest.txt
test three.txt
test two
シェルのバックスラッシュは、タブ補完を使用してファイル名を挿入するときに期待どおりにファイル名をエスケープします。
% echo "testing" >> test<tab>
タブを3回押すと、これが自動補完されます。
% echo "testing" >> test\ four\ -\ latest.txt
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
git status
これらのファイル名を引用符で示します(何が起きているかを完全に理解しています):
% git status --short
M test
M "test four - latest.txt"
M "test three.txt"
M "test two"
しかし、git add
タブのオートコンプリートをしようとすると、横向きになります。
% git add test<tab>
タブを3回押した後にこれが発生します。
% git add test four - latest.txt
test test four - latest.txt test three.txt test two
私はこれを少し後退させようとしました:ドットファイルはバージョン管理されているので、試しました zsh 4.3.15
、git 1.8.3
私はほぼ確信しているとき、および年前から私のドットファイルは、この働きました。奇妙なことに、このセットアップはまだ壊れていました。
私はそれを_git
ソースとする補完ファイルに絞り込みました/usr/local/share/zsh/site-functions
:
% echo $FPATH
/usr/local/share/zsh/site-functions:/usr/local/Cellar/zsh/5.0.5/share/zsh/functions
% ls -l /usr/local/share/zsh/site-functions
_git@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/_git
_hg@ -> ../../../Cellar/mercurial/3.0/share/zsh/site-functions/_hg
_j@ -> ../../../Cellar/autojump/21.7.1/share/zsh/site-functions/_j
git-completion.bash@ -> ../../../Cellar/git/1.9.3/share/zsh/site-functions/git-completion.bash
go@ -> ../../../Cellar/go/HEAD/share/zsh/site-functions/go
実行$FPATH
前に手動で変更する(または単にシンボリックリンクを削除する)場合、完了はフォールバックして期待どおりに動作します。.zshrc
compinit
/usr/local/share/zsh/site-functions/_git
zsh
zsh
なしの完了_git
:
% git add test<tab>
タブを3回押すと、正しい結果が生成されます。
% git add test\ four\ -\ latest.txt
––– modified file
test test\ four\ -\ latest.txt test\ three.txt test\ two
サイドノート:git-completion.bash
リンクを削除しようとしましたが、まったく問題があります:
% git add test<tab>
この破綻を生成します。
% git add test__git_zsh_bash_func:9: command not found: __git_aliased_command
git add test
––– file
test test\ four\ -\ latest.txt test\ three.txt test\ two
私は本当にこれを適切に機能させたいと思っています:残りの_git
完了は素晴らしいものでした。zsh
が、適切にエスケープするにはスペースまたは他の特殊文字を含むファイル名が必要です。
ソフトウェアのバージョン:
% zsh --version
zsh 5.0.5 (x86_64-apple-darwin13.0.0)
% git --version
git version 1.9.3
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.9.3
BuildVersion: 13D65
ファイル_git
とgit-completion.bashと_gitをアップロードしました(CloudAppがブラウザーで表示できるように名前を変更しました)。git-completion.bash
_git.sh
_git
。compadd -Q
変に見える呼び出し:-Q
「特殊文字を引用しない」ことを意味します。呼び出し-Q
から削除してみてくださいcompadd
。
zsh
単語を分割しないコマンド置換結果のデフォルトの動作にあると確信しています。実際には、\bs
エスケープは必要ではありません-または、見方によっては無駄です。"SH_WORD_SPLIT"
zsh.sourceforge.net/FAQ/zshfaq03.htmlを
${=$(completion)}
て、返すような出力を作成します。