gpt4 book ai didi

zsh - 如何使zsh前向字行为与bash/emacs中的相同

转载 作者:行者123 更新时间:2023-12-03 23:34:15 28 4
gpt4 key购买 nike

zsh转发字的行为与bash / emacs有所不同,我想对此进行更改。

让我仅向您展示bash的逐步行为,而不是描述所有差异。我将光标标记为“ ^”符号。

foo bar --non-needed-param --needed-param^


-

foo bar --non-needed-param --needed-^param


-

foo bar --non-needed-param --^needed-param


-

foo bar --non-needed-^param --needed-param


-

foo bar --non-^needed-param --needed-param


-

foo bar --^non-needed-param --needed-param


-

foo ^bar --non-needed-param --needed-param


-

foo bar^ --non-needed-param --needed-param


口径

foo bar^-needed-param --needed-param


口径

foo bar^-param --needed-param


口径

foo bar^ --needed-param


该算法既可以灵活移动单词,又可以为我删除部分单词。而且它在emacs中,所以我已经习惯了。我也想在zsh中看到它。谢谢。

最佳答案

正是出于这个目的,我在我的.zshrc中拥有了这个:

# Bash-like navigation
autoload -U select-word-style
select-word-style bash


编辑:啊,我记得为了使一切都能按我想要的工作所缺少的东西。我还通过将以下内容放入 forward-word-match来重写 $ZDOTDIR/functions/forward-word-match(假设您的 $ZDOTDIR/functions目录位于 $fpath中;否则将其放入一个目录中,或者也修改 $fpath数组):

emulate -L zsh
setopt extendedglob

autoload match-words-by-style

local curcontext=":zle:$WIDGET" word
local -a matched_words
integer count=${NUMERIC:-1}

if (( count < 0 )); then
(( NUMERIC = -count ))
zle ${WIDGET/forward/backward}
return
fi

while (( count-- )); do

match-words-by-style

# For some reason forward-word doesn't work like the other word
# commands; it skips whitespace only after any matched word
# characters.

if [[ -n $matched_words[4] ]]; then
# just skip the whitespace and the following word
word=$matched_words[4]$matched_words[5]
else
# skip the word but not the trailing whitespace
word=$matched_words[5]
fi

if [[ -n $word ]]; then
(( CURSOR += ${#word} ))
else
return 1
fi
done

return 0

关于zsh - 如何使zsh前向字行为与bash/emacs中的相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10847255/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com