Виджеты для манипулирования регистром: `gU` в обычном режиме и`U` в визуальном режиме
Я считаю, что уже есть виджет для g~
действие в зле. Так g~iw
инвертирует регистр слова.
Я прочитал руководство zshzle и не нашел виджет, который дал бы мне поведение gU
(капитализировать действие) в Vim.
например: для слова "path_variable", с курсором на v
, gUiW изменил бы мир на "PATH_VARIABLE", и так далее, и так далее.
виджет capitalize-word
не кажется ответом. Я проверял это.
Я также обнаружил, что ключ U
в визуальном режиме не используется заглавный текст / регион. Я не нашел в руководстве виджета, который бы дал мне желаемое поведение.
Это вопрос написания пользовательского виджета, или нужно будет отправить апстрим с изменениями кода c? Как я могу связать gU
в норме и U
в визуальном режиме для достижения желаемого поведения в zle vi-mode?
1 ответ
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