如何在zsh中删除斜线或单词?


20

重击行为

我刚从迁移bashzsh。在中bash,我有以下一行~/.inputrc

"\e\C-?": unix-filename-rubout

因此,Alt+ Backspace将删除回到前一个斜杠,这对于更改输入的路径很有用。

此外,bash默认情况下使用Ctrl+ w delete删除前一个空格,这对于删除整个参数(假定它们没有空格)很有用。

Zsh行为

在中zshAlt+ BackspaceCtrl+ w做相同的事情。它们都删除前一个单词,但是它们对于构成一个分词符过于宽松,最多删除前一个-_。有没有办法使zsh行为类似于bash?如果重要的话,我已经oh-my-zsh安装了。


1
您是否要更改zsh对单词构成的定义?如果是这样的话:unix.stackexchange.com/questions/48577/…还是要用不同的单词定义来定义一个新命令?
吉尔(Gilles)“所以,别再邪恶了”

@吉尔斯我想两者结合。在bash中,我会定期使用两个不同的命令:即删除到最后/和删除到最后一个``。它们具有不同的功能。
Sparhawk

1
@Gilles所以,是的,该链接适用于我bash的Alt + Backspace行为,但是我仍然希望(不同)bashCtrl + w行为,即删除到最后一个空格。
Sparhawk

Answers:


14

编辑:您的问题后的下一个Google结果是具有相同解决方案的这个结果:zsh:使ALT + BACKSPACE停止在非字母数字字符处

该答案由/nick FoHfreenode上的#zsh 提供。

backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir

这样,您可以ctrl+w用于删除单词(在vim术语中)和alt+bkspc删除单词


辉煌!感谢您抽出宝贵的时间来调查和回答。
Sparhawk

关于Google:除了我9个月前问过我的问题,而且不到一个月前他们问了他们的问题。
Sparhawk

1
时间只是一个社会建构的人!..但说真的,很公平。
JunkMechanic,

20

在这里提出了类似的问题:zsh:在目录定界符上停止向后杀人字

并给出了可行的解决方案:将这些设置添加到您的zshrc中:

autoload -U select-word-style
select-word-style bash

感谢您的回答。但是,这些答案都不对我有用。(具体来说,您引用的内容没有任何变化。)可能是因为我已经oh-my-zsh安装了。无论如何,按照我的问题,这似乎无法解决两个不同的功能和键绑定。(如果我的问题是欺骗,则应将其视为欺骗。不是。)
Sparhawk

1
您需要调整WORDCHARS变量。在zsh中很简单vared WORDCHARS
Jshura '16

如果我们将其与论坛中的已回答问题进行匹配,则该副本将是重复的。
Thomas Dickey

@ThomasDickey哦,是的,很抱歉,我没有发现我交换了SE网站。
Sparhawk

@Jshura不,根据问题,我想要两个不同的功能,可以在中使用bash
Sparhawk

5

扩展JunkMechanic的答案,我想要

  • 现有zsh的快捷键(CtrlWCtrlCtrl)的作品作为默认的zsh
  • Alt基于快捷键(AltWAltAlt)类似的工作,但“更细粒度的”,例如为最接近的/

这是我现在使用的:

# Alt+Backspace
backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.