目前我正在使用 zsh ,每次我对目录使用制表符完成时,它都会在末尾添加一个正斜杠。这在使用诸如 rsync 之类的命令时会产生问题,该命令会区分具有正斜杠的目录参数。所以每次我使用制表符完成时,我都需要返回并删除正斜杠。
问问题
1226 次
1 回答
-2
不是我的代码,我是从zshwiki 获得的(链接现已失效:ln -s wayback machine),但您可以将其放入 .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 文档,虽然有时很密集。
于 2013-06-25T22:16:09.763 回答