アップデート

アップデート

zshデフォルトでは、 CTRL+wALT+ はBackspaceまったく同じ効果を持つようです。

CTRL+ をwそのままにして、英数字以外の文字で停止するようにALT+を変更するにはどうすればよいでしょうか。Backspace

つまり、カーソルが次のコマンドの末尾にある場合: echo /aaa/bbb/cccCTRL+を押すとwから抜けechoALT+ を押すと から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バインディングにはリストされていませんが、あなた定義した関数にバインドすることで構成できます。

私の答えから作業する

    私はリスト上の誰か(Oliver Kiddle)が提供したこのビットを使用します。チェック
    詳細については、10月8日月曜日のアーカイブをご覧ください。

    tcsh-後方削除単語() {
      ローカル WORDCHARS="${WORDCHARS:s#/#}"
      zle 後方削除単語
    }

    私はこれを次のようにコントロール+Wにバインドしました:
    バインドキー '^W' tcsh 後方単語削除

    しかし、明らかにそれを変更することができます。

    それがあなたが探しているものだと思います、そうではありませんか?

    '$WORDCHARS'変数はzshが単語の境界を決定する方法なので、
    これに「/」をグローバルに追加することもできますが、これは他のものに影響を与える可能性があります
    残しておきたいので、この機能を好みます。

つまり、独自の関数内でローカル変数として使用し$WORDCHARS、必要に応じて単語を定義し、任意のキーにバインドすることができます。

関数を定義するときは、キーマップ:

zle -N tcsh-backward-delete-word

関連情報