0

我认为已经有一个小部件g~操作的小部件。所以g~iw会反转一个单词的大小写。

我阅读了 zshzle 手册,但没有找到可以给我行为的小部件gU在 vim 中为我提供(大写操作)行为的小部件。

例如:对于单词“path_variable”,将光标放在v,gUiW 会将世界更改为“PATH_VARIABLE”,依此类推。

小部件capitalize-word似乎不是答案。我已经测试过了。

我还发现了关键U视觉模式下的键不会大写视觉选择的文本/区域。我也没有在手册中找到可以为我提供所需行为的小部件。

这是编写自定义小部件的问题,还是必须在上游提交带有 c 代码更改的补丁?如何gU在正常模式和U可视模式下绑定以在 zle vi 模式下实现所需的行为?

4

1 回答 1

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
于 2016-10-07T17:41:06.033 回答