如果我在行尾调用它,我希望将其ls Dir\ A/Long\ File\ Name
变成kill-word 。ls Dir\ A/
我知道我可以/
通过修改来删除 to $WORDCHARS
,但我找不到忽略转义空格的方法。
答案1
没有办法告诉内置小部件backward-kill-word
(它会杀死下一个单词)左边光标)来做到这一点,但你可以自己滚动:
backward-kill-word() {
# LBUFFER -- all text left of the cursor
# (z) -- split into shell words
# (A) -- force the resulting words into an array
# [-1] -- take the right-most element
# :t -- strip all path ancestors from it
# % -- remove the shortest matching substring from the right
LBUFFER=${LBUFFER%${${(zA)LBUFFER}[-1]:t}*}
zle -f kill # Tell the Zsh Line Editor that we've killed text.
}
zle -N backward-kill-word # Replace the default widget.
替换kill-word
(杀死下一个单词)正确的光标)非常相似:
kill-word() {
# RBUFFER -- all text to the right of the cursor
# [1] -- take the left-most element
# :h1 -- strip all path descendants from it
# # -- remove the shortest matching substring from the left
RBUFFER=${RBUFFER#*${${(zA)RBUFFER}[1]:h1}}
zle -f kill
}
zle -N kill-word
答案2
如果您不介意输入多个键,则可以使用^R / ^K
返回到上一个斜杠,然后kill 到行尾。如果最初光标后面有更多单词,您可以使用^@ ^R / ESC-x kill-region RET
(不幸的kill-region
是默认情况下不绑定到键;Emacs 绑定^W
被赋予,backward-kill-word
而不是为了与标准熟 tty 绑定兼容)。
在 vi 模式下,以命令模式开始并以插入模式结束,您可以使用诸如T/C
删除到行尾或vT/s
删除dT/s
直到包含原始光标位置的操作。
select-word-style shell
您可能感兴趣:它会导致单词运动使用 shell 语法。
autoload -Uz select-word-style
select-word-style shell
不幸的是,它不能解决您的问题,因为斜杠是单词的一部分。我看不到一种方法可以利用它来停止单词中的某些字符而不更改 的代码match-words-by-style
。