git的ZSH完成功能不会自动完成绝对路径吗?

400猫

我在git仓库中/.git,即我的文件系统的根目录。

当我进入/etc/foo/并执行操作时git status,git告诉我该文件../fstab已更改。

当我想使用zsh完成git命令(仍在/ etc / foo /中)时,即:

git diff ../fs<TAB>

这样可行。但是当我使用绝对路径时,即:

git diff /etc/fs<TAB>

zsh无法完成绝对路径。

我如何知道zsh完整的绝对路径以及相对路径?

在Debian Buster上使用zsh版本5.7.1-1

复仇

ZSH完成:

Zsh补全使用通常位于/usr/share/zsh/5.5/functions/Completion/Unix每个命令_commandName补全的脚本名称处的脚本来完成(可能会有所不同),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与完成插件完成gitfastohmyzsh下面的步骤:

ohmyzsh克隆到某个位置(假设/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.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

实现-自动完成功能不会立即显示选项

自动完成功能不会显示下拉列表

jQuery自动完成功能不会过滤结果

Vuetify自动完成功能不会渲染

绝对路径是否可以在Visual Studio Code(VSCode)中自动完成?

jQuery自动完成功能不会使用PHP,Mysql数据自动完成

如果目录名称中有空格,则在自动完成时,路径始终为绝对路径

选择完成后,jQuery自动完成功能不会清除输入

当前运行的zsh的绝对路径?

编写ZSH自动完成功能

Zsh:智能自动完成功能?

哦,OSX上的我的ZSH Docker自动完成功能不起作用

如何在zsh中为自定义完成功能的路径添加自动完成功能?

React不会渲染自动完成功能

如何使IntelliJ自动完成功能不在Javadoc中插入完整路径

自动完成功能不会检测到对源对象的更改

将$。删除后,自动完成功能不会$ .empty / comeback

自动跳转自动完成功能不起作用

git grep显示绝对路径

知道为什么这个Jquery自动完成功能不起作用吗?

Zsh / git:如果“ HEAD ^”在输入行的最后一个单词旁边,则制表符自动完成功能不起作用

自动补全功能不会自动完成

如果使用绝对路径调用应用程序,则Bash完成将无法正常工作

自动完成功能不起作用

vscode键入自动完成功能不起作用

组合框自动完成功能不起作用

阿尔及利亚角度自动完成功能不起作用

自动完成功能不显示在MVC中的图像

HTML自动完成功能不起作用