Command line 如何使zsh vi风格的命令尊重WORDCHARS?
我更喜欢Command line 如何使zsh vi风格的命令尊重WORDCHARS?,command-line,zsh,Command Line,Zsh,我更喜欢vi样式单词移动,例如vi向前单词,而不是向前单词,这样光标也会停在分隔符上。但是,在本例中,我还想使用zsh尊重WORDCHARS,或者以某种方式定义分隔符。这有可能吗?似乎我可以让zsh使用我的分隔符,或者使用vi样式移动,也可以在它们上面停止,但不能同时使用两者 例如,如果我的线路如下: % ls -la /foo/bar/f-b/r 然后,如果我开始逐字向前移动,它将停止在/,foo,/,栏,/,f-b,/,r my.zshrc中的相关行: WORDCHARS='*?_-.[]
vi样式
单词移动,例如vi向前单词
,而不是向前单词
,这样光标也会停在分隔符上。但是,在本例中,我还想使用zsh
尊重WORDCHARS
,或者以某种方式定义分隔符。这有可能吗?似乎我可以让zsh
使用我的分隔符,或者使用vi样式
移动,也可以在它们上面停止,但不能同时使用两者
例如,如果我的线路如下:
% ls -la /foo/bar/f-b/r
然后,如果我开始逐字向前移动,它将停止在/
,foo
,/
,栏
,/
,f-b
,/
,r
my.zshrc
中的相关行:
WORDCHARS='*?_-.[]~=&;!#$%^(){}<>' # removed /
autoload select-word-style
select-word-style normal
bindkey '^W' vi-backward-kill-word
bindkey '^f' vi-forward-word
bindkey '^b' vi-backward-word
WORDCHARS='*?-.[]~=&;!#$%^(){}#删除/
自动加载选择字样式
选择“文字样式正常”
bindkey“^W”vi反向终止字
bindkey“^f”vi转发字
bindkey“^b”vi反向单词
最后,我实现了自己的zle
小部件:
SEPCHARS='[/ ]'
my-forward-word() {
if [[ "${BUFFER[CURSOR + 1]}" =~ "${SEPCHARS}" ]]; then
(( CURSOR += 1 ))
return
fi
while [[ CURSOR -lt "${#BUFFER}" && ! "${BUFFER[CURSOR + 1]}" =~ "${SEPCHARS}" ]]; do
(( CURSOR += 1 ))
done
}
zle -N my-forward-word
bindkey '^f' my-forward-word
my-backward-word() {
if [[ "${BUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; then
(( CURSOR -= 1 ))
return
fi
while [[ CURSOR -gt 0 && ! "${BUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; do
(( CURSOR -= 1 ))
done
}
zle -N my-backward-word
bindkey '^b' my-backward-word
my-backward-kill-word() {
if [[ "${LBUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; then
LBUFFER="${LBUFFER[1, CURSOR - 1]}"
return
fi
while [[ CURSOR -gt 0 && ! "${LBUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; do
LBUFFER="${LBUFFER[1, CURSOR - 1]}"
done
}
zle -N my-backward-kill-word
bindkey '^W' my-backward-kill-word
最后,我实现了自己的
zle
widgets:
SEPCHARS='[/ ]'
my-forward-word() {
if [[ "${BUFFER[CURSOR + 1]}" =~ "${SEPCHARS}" ]]; then
(( CURSOR += 1 ))
return
fi
while [[ CURSOR -lt "${#BUFFER}" && ! "${BUFFER[CURSOR + 1]}" =~ "${SEPCHARS}" ]]; do
(( CURSOR += 1 ))
done
}
zle -N my-forward-word
bindkey '^f' my-forward-word
my-backward-word() {
if [[ "${BUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; then
(( CURSOR -= 1 ))
return
fi
while [[ CURSOR -gt 0 && ! "${BUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; do
(( CURSOR -= 1 ))
done
}
zle -N my-backward-word
bindkey '^b' my-backward-word
my-backward-kill-word() {
if [[ "${LBUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; then
LBUFFER="${LBUFFER[1, CURSOR - 1]}"
return
fi
while [[ CURSOR -gt 0 && ! "${LBUFFER[CURSOR]}" =~ "${SEPCHARS}" ]]; do
LBUFFER="${LBUFFER[1, CURSOR - 1]}"
done
}
zle -N my-backward-kill-word
bindkey '^W' my-backward-kill-word
我非常了解
zsh
,建议您可以编写一个定制的zle
小部件,为您提供所需的行为,但是还不足以建议如何编写它。谢谢你的提示-这就是我所做的。我知道zsh
足以建议你可以编写一个自定义zle
小部件来提供你想要的行为,但还不足以建议如何编写它。谢谢你的提示-这就是我所做的。