目前我正在使用zsh,每次我对目录使用制表符完成时,它会在末尾添加正斜杠。这在使用rsync之类的命令时会产生问题,这会使具有正斜杠的目录参数不同。因此,每次使用制表符完成时,我都需要返回并删除正斜杠。
答案 0 :(得分:-1)
不是zsh技巧和提示的专家,但您可以将其放在.zshrc文件中:
remove-slash () {
if [[ $LBUFFER = */ ]] && [[ $LBUFFER != *' '/ ]]; then
LBUFFER="${LBUFFER[0,-2]} "
else
LBUFFER+=' '
fi
}
no-remove-slash () {
LBUFFER+=' '
}
zle -N remove-slash
zle -N no-remove-slash
bindkey " " remove-slash
bindkey "^x " no-remove-slash
每次按空格键时,由于bindkey " " remove-slash
行,会调用函数remove-slash,它会操纵光标左侧的字符串LBUFFER
以删除尾部斜杠
但请注意,在命令行按空格键时,每次时都会调用此函数,因此,如果您要键入sed s/ /_/g
,则最终会使用sed s /_/g
,因为remove-slash
会杀死第一个斜杠。因此,另一个bindkey行允许您处理这种情况:按Ctrl-x
然后按Space
,斜杠不会被吞没。
虽然这个解决方案有点破解,但是你的问题可能只有一些zsh选项,但你同时也有这个选择。
我鼓励您使用此代码并查看其功能。打开终端并在提示符下输入这些行,看看他们做了什么。你可能会搞砸你在那个特定提示下输入输入的能力,但你可以关闭终端并重新开始:没有任何东西得到保存,就像它一样。另外看看zle documentation,尽管它有时很密集。