
次の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
}