用于大小写操作的小部件:普通模式下的 `gU` 和可视模式下的 `U`
widgets for case manipulation: `gU` in normal and `U` in visual mode
我估计 zle 中已经有一个用于 g~
操作的小部件。所以 g~iw
会反转单词的大小写。
我阅读了 zshzle 手册,但没有找到可以在 vim 中为我提供 gU
(大写操作)行为的小部件。
例如:对于单词"path_variable",当光标在v
上时,gUiW 会将世界更改为"PATH_VARIABLE",依此类推。
小部件 capitalize-word
似乎不是答案。我已经测试过了。
我还发现在可视化模式下按键U
并没有将可视化选中的text/region大写。我在手册中也没有找到可以给我所需行为的小部件。
这是编写自定义小部件的问题,还是必须向上游提交包含 C 代码更改的补丁?如何在正常模式下绑定 gU
并在可视模式下绑定 U
以在 zle vi 模式下实现所需的行为?
ZSH 5.3 将为此预构建小部件。但如果你等不及了,那就是:
# credits go to Oliver Kiddle <opk@zsh.org>,
# who personally shared these upper/lower widgets.
# I just corrected a small bug.
vi-lowercase() {
local save_cut="$CUTBUFFER"
local save_cur="$CURSOR"
zle .vi-change || return
zle .vi-cmd-mode
CUTBUFFER="${CUTBUFFER:l}"
if [[ $CURSOR = '0' ]]; then
zle .vi-put-before -n 1
else
zle .vi-put-after -n 1
fi
CUTBUFFER="$save_cut"
CURSOR="$save_cur"
}
vi-uppercase() {
local save_cut="$CUTBUFFER"
local save_cur="$CURSOR"
zle .vi-change || return
zle .vi-cmd-mode
CUTBUFFER="${CUTBUFFER:u}"
if [[ $CURSOR = '0' ]]; then
zle .vi-put-before -n 1
else
zle .vi-put-after -n 1
fi
CUTBUFFER="$save_cut"
CURSOR="$save_cur"
}
# can safely disable this after commit zsh commit #a73ae70 (zsh-5.2-301- ga73ae70)
zle -N vi-lowercase
zle -N vi-uppercase
bindkey -a 'gU' vi-uppercase
bindkey -a 'gu' vi-lowercase
bindkey -M visual 'u' vi-lowercase
bindkey -M visual 'U' vi-uppercase
我估计 zle 中已经有一个用于 g~
操作的小部件。所以 g~iw
会反转单词的大小写。
我阅读了 zshzle 手册,但没有找到可以在 vim 中为我提供 gU
(大写操作)行为的小部件。
例如:对于单词"path_variable",当光标在v
上时,gUiW 会将世界更改为"PATH_VARIABLE",依此类推。
小部件 capitalize-word
似乎不是答案。我已经测试过了。
我还发现在可视化模式下按键U
并没有将可视化选中的text/region大写。我在手册中也没有找到可以给我所需行为的小部件。
这是编写自定义小部件的问题,还是必须向上游提交包含 C 代码更改的补丁?如何在正常模式下绑定 gU
并在可视模式下绑定 U
以在 zle vi 模式下实现所需的行为?
ZSH 5.3 将为此预构建小部件。但如果你等不及了,那就是:
# credits go to Oliver Kiddle <opk@zsh.org>,
# who personally shared these upper/lower widgets.
# I just corrected a small bug.
vi-lowercase() {
local save_cut="$CUTBUFFER"
local save_cur="$CURSOR"
zle .vi-change || return
zle .vi-cmd-mode
CUTBUFFER="${CUTBUFFER:l}"
if [[ $CURSOR = '0' ]]; then
zle .vi-put-before -n 1
else
zle .vi-put-after -n 1
fi
CUTBUFFER="$save_cut"
CURSOR="$save_cur"
}
vi-uppercase() {
local save_cut="$CUTBUFFER"
local save_cur="$CURSOR"
zle .vi-change || return
zle .vi-cmd-mode
CUTBUFFER="${CUTBUFFER:u}"
if [[ $CURSOR = '0' ]]; then
zle .vi-put-before -n 1
else
zle .vi-put-after -n 1
fi
CUTBUFFER="$save_cut"
CURSOR="$save_cur"
}
# can safely disable this after commit zsh commit #a73ae70 (zsh-5.2-301- ga73ae70)
zle -N vi-lowercase
zle -N vi-uppercase
bindkey -a 'gU' vi-uppercase
bindkey -a 'gu' vi-lowercase
bindkey -M visual 'u' vi-lowercase
bindkey -M visual 'U' vi-uppercase