我正在使用 VSCode,我有一个很好的行为:当我alt-right-arrow
从行尾执行时,它会停在
foo/bar/test_wait_what
^ ^ ^ ^
当我这样做时delete+alt
,它会删除what
,然后_
,然后wait
,等等。
我想用 zsh 做差不多同样的事情(不用 oh-my-zsh,因为我已经在使用 zimfw)。开箱即用,它似乎不将其视为_
单词分隔符,并且对于/
,它同时将其删除。
我发现了一些类似的问题,他们建议使用select-word-style bash
,但是 bash 在删除时没有我想要的行为。
另外,我发现很难找到有关 zsh、示例等的清晰信息,所以如果您对我自己如何找到答案有任何建议,请不要犹豫。
答案1
将其添加到您的~/.zshrc
文件中:
# Enable additional matching syntax.
# It's required for the function below, but you'll want this anyway.
# According to many, it's THE killer feature of Zsh.
# It makes no sense to me that this is disabled by default.
# See http://zsh.sourceforge.net/Doc/Release/Expansion.html#Filename-Generation
setopt extendedglob
# Override the existing widget that's bound to alt-backspace.
zle -N backward-kill-word
backward-kill-word() {
if [[ $LBUFFER[-1] == [[:WORD:]] ]]; then
# If there's a word char left of the cursor, use the old widget.
zle .backward-kill-word
else
# Select all consecutive non-word chars left of the cursor.
(( MARK = ${#LBUFFER%%[^[:WORD:]]##} - 1 ))
# Kill them.
zle .kill-region
fi
}
我更喜欢上面的解决方案,而不是https://unix.stackexchange.com/a/565761/413610,因为我的保留了的“杀死”功能altbackspace,这意味着您可以ctrlY在必要时使用它来粘贴(“拉”)已删除的文本。