Zsh选项卡完成为目录添加正斜杠,如何避免这种情况?

时间:2013-06-25 05:47:21

标签: zsh zsh-completion

目前我正在使用zsh,每次我对目录使用制表符完成时,它会在末尾添加正斜杠。这在使用rsync之类的命令时会产生问题,这会使具有正斜杠的目录参数不同。因此,每次使用制表符完成时,我都需要返回并删除正斜杠。

1 个答案:

答案 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,尽管它有时很密集。