Zsh 配置行导航

Zsh 配置行导航

我正在使用 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在必要时使用它来粘贴(“拉”)已删除的文本。

相关内容