我安装了 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图片:
对于第二条命令,由于“file1”不是文件夹,因此在“file1”和“*”之间添加了一个空格。
我不希望在“file1”和“*”之间添加空格,因为当我要删除名称中以“file1”开头的文件时,我可能会r, m, Space, -, r, f, Space, Tab, Tab, Tab, Tab, *, Enter
依次按,并且我认为命令将是rm -rf file1*
,但是命令实际上是rm -rf file1 *
,有时我可能会按“y”而没有注意到添加的空格,所以我可能会错误地删除所有文件夹和文件。请看下面的gif图片:
我曾经错误地删除了许多文件夹和文件。
我用谷歌搜索了很多天来删除该空间,但没有成功。
我发现 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图片:
我还尝试了许多其他配置。
提前致谢。
答案1
您可以添加*
到$ZLE_REMOVE_SUFFIX_CHARS
。
ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|*'
(此处附加到未设置变量时默认使用的值)
所以补全插入的后缀,无论是/
或空间*
在选定的完成后键入时将被删除。