zshkill-word 可以忽略转义的空格吗?

zshkill-word 可以忽略转义的空格吗?

如果我在行尾调用它,我希望将其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

相关内容