zleウィジェットを使用してバッファ全体を選択するには?

zleウィジェットを使用してバッファ全体を選択するには?

次のzleウィジェットがあります。

_ctrl-a() {
  CURSOR=0
  if ((MARK == 0)); then
    zle set-mark-command
  fi

  if [ "$BUFFERLINES" -gt 1 ]; then
    zle end-of-buffer-or-history
  else
    zle end-of-line
  fi
}

zle -N _ctrl-a
bindkey '^A' _ctrl-a # Ctrl+A

バッファ全体を選択します。私の言うことは、カーソルをバッファの先頭に置き、マーカーを始めてから、カーソルをバッファの終わりに置くということです。

ここで複数行コマンドに使用するウィジェットはend-of-buffer-or-historyですが、 で作りたいと思いますend-of-buffer

だから私は以下を交換したいと思います:

if [ "$BUFFERLINES" -gt 1 ]; then
  zle end-of-buffer-or-history
else
  zle end-of-line
fi

そして

zle end-of-buffer

しかし、そうではないようですend-of-buffer

どうですか?

ポリスチレン変数を使用してバッファ全体を選択できる場合は、良い学習経験になりますMARK

ベストアンサー1

存在するウィジェットコードMARK、、、CURSORなどBUFFERの変数を読み取ることができるだけでなく、変更することもできます。

カーソルをバッファの末尾に移動するには、次のようにします。

CURSOR=$#BUFFER

マーカーが先頭にあり、カーソルの最後にあるバッファ全体を選択するためにウィジェットを呼び出す必要はありません。適切な変数を設定するだけです。

function _ctrl-a {
  MARK=0
  CURSOR=$#BUFFER
  REGION_ACTIVE=1
}

おすすめ記事