重击行为
我刚刚从 迁移bash
到zsh
。在 中bash
,我有以下行~/.inputrc
。
"\e\C-?": unix-filename-rubout
因此,Alt+Backspace会删除回到前一个斜杠,这对于编辑路径很有用。
单独地,bash
默认为Ctrl+w 删除上一个空间,这对于删除整个参数很有用(假设它们没有空格)。因此,有两个稍微不同的使用每个组合键执行的操作。
Zsh 行为
在 中zsh
,Alt+Backspace和Ctrl+都w做同样的事情。他们都删除了前一个单词,但他们对断词的定义过于宽松,删除了前一个-
或_
。有没有办法让zsh
行为类似于bash
, with两个独立的动作?如果重要的话我已经oh-my-zsh
安装了。
答案1
这里也提出了类似的问题:zsh:在目录分隔符上停止向后杀字
并给出了可行的解决方案:将这些设置添加到您的 zshrc 中:
autoload -U select-word-style
select-word-style bash
答案2
编辑:您的问题后的下一个谷歌结果是这个具有相同解决方案的结果:zsh:使 ALT+BACKSPACE 停在非字母数字字符处
这个答案是/nick FoH
由 freenode 上的 #zsh 提供的。
backward-kill-dir () {
local WORDCHARS=${WORDCHARS/\/}
zle backward-kill-word
zle -f kill
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir
通过这种方式,您可以用于ctrl+w
删除单词(用 vim 行话)并alt+bkspc
删除单词
答案3
扩展于垃圾机械师的回答,我想要那个
- 现有的 zsh 快捷方式(CtrlW、Ctrl←和Ctrl→)与 zsh 默认值一样工作
- Alt基于快捷方式(AltW、Alt←和Alt→)的工作方式类似,但“更细粒度”,例如直到最接近的
/
这是我现在使用的:
# 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
有关 的详细信息zle -f kill
,请参阅Zsh - 在自定义小部件中粘贴文本仅适用于最后一个单词,可以修复吗?
答案4
bindkey '^[^?' vi-backward-kill-word
据我所知,它的效果Meta-BackSpace
与@thomas-dickey 建议的答案,而且是单行而不是两行;-)。然而,这仅有的影响Meta-BS。如果您正在寻找元(左/右)导航的完整类似 bash 的行为,那么这select-word-style
是正确的方法。
(脚注:select-word-style
-事物已记录在案,man zshcontrib
但我几乎无法理解。vi-backward-kill-word
记录在man zshzle
。)