zsh/oh-my-zsh:如何使制表符补全不为非文件夹文件添加尾随空格?

zsh/oh-my-zsh:如何使制表符补全不为非文件夹文件添加尾随空格?

我安装了 zsh 和 oh-my-zsh。

默认情况下,当使用制表符补全时,zsh 会为非文件夹文件添加尾随空格。

test_files为了演示,我在名为并cd编辑到的文件夹中创建了以下文件夹/文件test_files

test_files
├── dir1
│   └── file4
├── dir2
│   └── file5
├── file1
├── file11
└── file111

首先,我l, s, Space, Tab, Tab, Tab, *, Enter依次按下并得到ls dir2/*第一个命令。其次,我l, s, Space, Tab, Tab, Tab, Tab, *, Enter依次按下并得到ls file1 *第二个命令。请看下面的gif图片:

zsh ls 命令

对于第二条命令,由于“file1”不是文件夹,因此在“file1”和“*”之间添加了一个空格。

我不希望在“file1”和“*”之间添加空格,因为当我要删除名称中以“file1”开头的文件时,我可能会r, m, Space, -, r, f, Space, Tab, Tab, Tab, Tab, *, Enter依次按,并且我认为命令将是rm -rf file1*,但是命令实际上是rm -rf file1 *,有时我可能会按“y”而没有注意到添加的空格,所以我可能会错误地删除所有文件夹和文件。请看下面的gif图片:

zsh rm 命令

我曾经错误地删除了许多文件夹和文件。

我用谷歌搜索了很多天来删除该空间,但没有成功。

我发现 zsh 文档中的 add-space 看起来很像我想要的,然后我尝试了zstyle ':completion:*' add-space false,但似乎没有任何改变。

我尝试仅将以下几行放入我的 中.zshrc,它仍然会添加该空间:

autoload -U compinit && compinit
zmodload -i zsh/complist
zstyle ':completion:*' menu select
zstyle ':completion:*' add-space false

如果我删除zstyle ':completion:*' menu select,则不会添加空格,但按 Tab 键时光标不会遍历文件夹/文件,所以我想保留menu select在配置中。请看下面的gif图片:

zsh rm 命令不带菜单选择

我还尝试了许多其他配置。

提前致谢。

答案1

您可以添加*$ZLE_REMOVE_SUFFIX_CHARS

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|*'

(此处附加到未设置变量时默认使用的值)

所以补全插入的后缀,无论是/空间*在选定的完成后键入时将被删除。

相关内容