zsh forward-word与bash/emacs有点不同,我想改变它.
而不是描述所有差异,让我向您展示bash的一步一步行为.我将光标标记为"^"符号.
foo bar --non-needed-param --needed-param^
Run Code Online (Sandbox Code Playgroud)
MB
foo bar --non-needed-param --needed-^param
Run Code Online (Sandbox Code Playgroud)
MB
foo bar --non-needed-param --^needed-param
Run Code Online (Sandbox Code Playgroud)
MB
foo bar --non-needed-^param --needed-param
Run Code Online (Sandbox Code Playgroud)
MB
foo bar --non-^needed-param --needed-param
Run Code Online (Sandbox Code Playgroud)
MB
foo bar --^non-needed-param --needed-param
Run Code Online (Sandbox Code Playgroud)
MB
foo ^bar --non-needed-param --needed-param
Run Code Online (Sandbox Code Playgroud)
MF
foo bar^ --non-needed-param --needed-param
Run Code Online (Sandbox Code Playgroud)
马里兰州
foo bar^-needed-param --needed-param
Run Code Online (Sandbox Code Playgroud)
马里兰州
foo bar^-param --needed-param
Run Code Online (Sandbox Code Playgroud)
马里兰州
foo bar^ --needed-param
Run Code Online (Sandbox Code Playgroud)
这个算法既可以灵活地移动单词,也可以为我删除部分单词.它也在emacs中,所以我已经习惯了.我也希望在zsh中看到它.谢谢.
Mor*_*kus 17
我的确有这个.zshrc
目的:
# Bash-like navigation
autoload -U select-word-style
select-word-style bash
Run Code Online (Sandbox Code Playgroud)
编辑:啊,我记得为了让一切都按照我想要的方式所缺少的东西.我还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
Run Code Online (Sandbox Code Playgroud)
为了通过 Emacs 键绑定获得您想要的行为,我所要做的就是:
bindkey '\ef' emacs-forward-word
Run Code Online (Sandbox Code Playgroud)
Moriz Bunkus 的这部分答案现在似乎也可以自行发挥作用:
autoload -U select-word-style
select-word-style bash
Run Code Online (Sandbox Code Playgroud)
它似乎在某些边缘情况下表现得更好(例如,它被视为?
单词边界,而上面的则不然。)
归档时间: |
|
查看次数: |
1895 次 |
最近记录: |