zsh
デフォルトでは、 CTRL+wとALT+ はBackspaceまったく同じ効果を持つようです。
CTRL+ をwそのままにして、英数字以外の文字で停止するようにALT+を変更するにはどうすればよいでしょうか。Backspace
つまり、カーソルが次のコマンドの末尾にある場合: echo /aaa/bbb/ccc
、CTRL+を押すとwから抜けecho
、ALT+ を押すと からBackspace抜けますecho /aaa/bbb/
。
アップデート
からの回答に基づいて@Thomas Dickey
、私は に以下を追加しました.zshrc
:
my-backward-delete-word () {
local WORDCHARS='~!#$%^&*(){}[]<>?+;'
zle backward-delete-word
}
zle -N my-backward-delete-word
bindkey '\e^?' my-backward-delete-word
コマンドライン エディターの動作が予想と異なるようになりました。
たとえば、一重引用符文字'
は では列挙されていないWORDCHARS
ため、 を押すと はでAlt+BackSpace停止backward-delete-word
するはずです'
。
これは最初の例では機能しますが、2 番目の例では機能しません。
$ echo 'asdf'
$ echo '
$ echo '=asdf'
$ echo '=
$
2 番目の例では、コマンドラインに を残しました。 を2 回目echo '=
に押すと、 を含め、すべてが食べられてしまいます。で停止するはずだったので、 のみが食べられると予想していました。Alt+BackSpaceecho
=
'
なぜ期待通りに動作しないのでしょうか?
答え1
bindkey
実際には、これはzshバインディングにはリストされていませんが、あなた定義した関数にバインドすることで構成できます。
私の答えから作業する
zsh でスラッシュまたは単語を削除するにはどうすればいいですか?、 私はこれを見つけました:
- Re: 後方キルウィル・ヤードリーは次のような例を挙げています。
私はリスト上の誰か(Oliver Kiddle)が提供したこのビットを使用します。チェック 詳細については、10月8日月曜日のアーカイブをご覧ください。 tcsh-後方削除単語() { ローカル WORDCHARS="${WORDCHARS:s#/#}" zle 後方削除単語 } 私はこれを次のようにコントロール+Wにバインドしました: バインドキー '^W' tcsh 後方単語削除 しかし、明らかにそれを変更することができます。 それがあなたが探しているものだと思います、そうではありませんか? '$WORDCHARS'変数はzshが単語の境界を決定する方法なので、 これに「/」をグローバルに追加することもできますが、これは他のものに影響を与える可能性があります 残しておきたいので、この機能を好みます。
使用
$WORDCHARS
例zsh シェルの単語分割を変更する、ウィキ
つまり、独自の関数内でローカル変数として使用し$WORDCHARS
、必要に応じて単語を定義し、任意のキーにバインドすることができます。
関数を定義するときは、キーマップ:
zle -N tcsh-backward-delete-word