/.git
私のファイルシステムのルートであるgitリポジトリがあります。
私が入って/etc/foo/
実行すると、git status
gitはファイルが../fstab
変更されたことを知らせます。
zsh
コマンド補完(まだ/etc/foo/にあります)を使用したい場合は、次のgit
ようになります。
git diff ../fs<TAB>
これはうまくいきます。しかし、絶対パスを使用すると、次のようになります。
git diff /etc/fs<TAB>
これによりzsh
絶対パスが不完全になります。
zsh
完全な絶対パスと相対パスをどのように知ることができますか?
私はDebian Busterのバージョンを使用していますzsh
。5.7.1-1
ベストアンサー1
ZSH完了:
Zshコンプリートは/usr/share/zsh/5.5/functions/Completion/Unix
通常(デプロイメントによって異なる場合があります)にあるスクリプトを使用して実行されます。各コマンド補完のスクリプトには名前が付けられ、ZshにはVariablesに似た_commandName
環境変数が含まれています。この場合、スクリプトはYes、Zshのため、場所の順序が重要です。見つかった最初のスクリプトを使用し、他のスクリプトがある場合は無視します(同様)。$fpath
$PATH
_git
$fpath
_git
$PATH
スクリプト:
これで説明されているように品質保証そして例えば次の関数は、ファイルの一般的な完成関数$PWD/
に渡す前に相対パスに追加します。_files
_absolute_files () {
local expansion=$PREFIX$SUFFIX; expansion=${(e)expansion}
if [[ "${expansion%%/#}" != "${expansion:a}" ]]; then
PREFIX="\$PWD/$PREFIX"
fi
_files "$@";
}
~/
これは、絶対などで始まるパス識別を含む多くの一般的なケースで機能します。
解決策:
デフォルトgit
の完了アクションには相対パスは含まれません。スクリプトを編集し、上記と同様の機能を追加することで、相対パスのサポートを追加できます。またはgit
基本的な完成を次の完成プラグインに簡単に変更できます。gitfast
オメジッシュ次の手順を実行します。
クローンオメジッシュ特定の場所(例/location
:)で:
git clone https://github.com/ohmyzsh/ohmyzsh.git
~/.zshrc
設定ファイルの一番下に次を編集して追加しますgitfast
。
fpath=( /location/ohmyzsh/plugins/gitfast $fpath )
前に説明したように、順序が重要ですここ。
~/.zcompdump*
実行中のエントリを削除して完了キャッシュを更新しますcompinit
。
代替ソリューション:
関数に次のパッチを適用して/usr/share/zsh/5.5/functions/Completion/Unix/_git
編集します。_git-diff
--- _git
+++ _git
@@ -766,6 +766,12 @@
case $state in
(from-to-file)
+
+ if [[ $line[1] == *\/* ]]; then
+ _alternative 'files::_files' && ret=0
+ return ret
+ fi
+
# If "--" is part of $opt_args, this means it was specified before any
# $words arguments. This means that no heads are specified in front, so
# we need to complete *changed* files only.