我刚刚从 迁移bash到zsh. 在 中bash,我在~/.inputrc.
"\e\C-?": unix-filename-rubout
Run Code Online (Sandbox Code Playgroud)
因此,Alt+Backspace会删除回前一个斜杠,这对于编辑路径很有用。
另外,bash默认为 make Ctrl+ w delete 到前一个space,这对于删除整个参数很有用(假设它们没有空格)。因此,每个组合键执行的操作略有不同。
在 中zsh,Alt+Backspace和Ctrl+w都做同样的事情。他们都删除了前一个单词,但他们对构成分词的内容过于宽松,删除了前一个-或_。有没有办法让zsh行为类似于bash,有两个独立的动作?如果重要的话,我已经oh-my-zsh安装了。
Tho*_*key 30
这里问了一个类似的问题:zsh: stop backward-kill-word on directory delimiter
并给出了一个可行的解决方案:将这些设置添加到您的 zshrc:
autoload -U select-word-style
select-word-style bash
Run Code Online (Sandbox Code Playgroud)
Jun*_*nic 20
编辑:您提出问题后的下一个谷歌结果是具有相同解决方案的结果: zsh: make ALT+BACKSPACE stop at non-alphanumeric characters
这个答案是由/nick FoHfreenode 上的 #zsh提供的。
backward-kill-dir () {
local WORDCHARS=${WORDCHARS/\/}
zle backward-kill-word
zle -f kill
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir
Run Code Online (Sandbox Code Playgroud)
这样你就可以ctrl+w用来删除一个单词(在 vim 术语中)和alt+bkspc删除一个单词
扩展JunkMechanic 的回答,我想要那个
/这是我现在使用的:
# Alt+Backspace
backward-kill-dir () {
local WORDCHARS=${WORDCHARS/\/}
zle backward-kill-word
zle -f kill # Ensures that after repeated backward-kill-dir, Ctrl+Y will restore all of them.
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir
# Alt+Left
backward-word-dir () {
local WORDCHARS=${WORDCHARS/\/}
zle backward-word
}
zle -N backward-word-dir
bindkey "^[[1;3D" backward-word-dir
# Alt+Right
forward-word-dir () {
local WORDCHARS=${WORDCHARS/\/}
zle forward-word
}
zle -N forward-word-dir
bindkey "^[[1;3C" forward-word-dir
Run Code Online (Sandbox Code Playgroud)
有关 的详细信息zle -f kill,请参阅Zsh - 在自定义小部件中删除的粘贴文本仅适用于最后一个字,可以修复吗?