0

g~zle にはアクション用のウィジェットが既にあると思います。そのg~iwため、単語の大文字と小文字を反転します。

gUzshzle のマニュアルを読みましたが、vim で (大文字のアクション)の動作をするウィジェットが見つかりませんでした。

たとえば、「path_variable」という単語の場合、カーソルをvに合わせると、gUiW はワールドを「PATH_VARIABLE」に変更します。

ウィジェットcapitalize-wordは答えではないようです。私はそれをテストしました。

また、ビジュアル モードのキーUは、視覚的に選択されたテキスト/領域を大文字にしないこともわかりました。マニュアルにも、望ましい動作を実現するウィジェットが見つかりませんでした。

これはカスタム ウィジェットを作成することの問題ですか、それとも C コードの変更を含むアップストリームにパッチを提出する必要がありますか? zle vi-modeで目的の動作を実現するためにgU、通常モードとビジュアルモードでバインドするにはどうすればよいですか?U

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 に答える