zshキーバインディング:引用符全体の文字列の操作を終了するLookBehindを作成します。

zshキーバインディング:引用符全体の文字列の操作を終了するLookBehindを作成します。

Ctrl+wまたは、Alt+Backspaceキーボードショートカットを使用してAlt+d単語を前後に削除するときにWORDCHARS文字を定義できることを知っています。

WORDCHARS='~!#$%^&*(){}[]<>?.+;-'

たとえば、Ctrl+w文字列の末尾でを使用すると、各単語が連続して削除されます。

echo aaa bbb ccc ddd eee

しかし、引用符付き文字列がある場合、引用符付きブロック全体を単一のエンティティとしてどのように処理できますか?

echo 'aaa bbb ccc' 'ddd eee fff'

したがって、Ctrl+w「ddd eee fff」全体を一度に削除する必要があります。二重引用符で囲まれた文字列に対しても同じ動作が必要です。"

答え1

これshellフォントそれがまさにそれがすることです。

autoload -U select-word-style
select-word-style shell

答え2

空白がなければならないと思いますがWORDCHARS、空白使用規則を定義する方法がないようです。これを達成する方法があるかどうかはわかりません。たぶん、コマンドラインで参照できるカスタムEmacsマクロを定義する方法があります。私が慣れていない両方の方法を実行する方法がある場合は、知っている人の意見を聞きたいです。

望む答えではありません

これは質問に対する直接的な答えではありませんが、組み込み関数を使用して説明されているとおりに実行できます(次の注意事項)。

ラインエディタの方法を次のように変更します。vi

set -o vi

それからこの小さな美しさを入力することを忘れないでください。

Esc2dF"x または、Esc2dF'x使用された見積価格に基づいています。

実際に指が転がることはありませんが、.必要に応じて少なくとも繰り返しを押すことができます。

ガイドライン

与えられた参照のインスタンスを後ろに2回検索し(構文、コンテキストなどに関係なく)、邪魔になっているすべての項目を削除します。これがコマンドラインで、カーソルが最後にあることを考えると、次のようになります。

echo "foo bar" baz

あなたは最終的に得るでしょう

echo<space>

または開始する場合

echo "foo bar" baz "boz

やっぱり同じ結果になるだろう正確に私が望むものではありません。

echo "foo bar

入力を開始する前にモードにする必要があるため、viプロファイルなどで設定する必要があります。

コマンドラインでvi編集するのはパラダイムの移行であり、筋肉記憶の問題で困難になる可能性があります。実際にはあまり楽しく見えません。

だから...

CtrlW私はそれを何度も壊したいと思うかもしれません。

誤って過度に作業した場合は、いつでもキャンセルできますCtrl_

答え3

Gilesが説明した書き込みスタイルは、実際にこれを行う正しい方法です。しかし、彼のアドバイスに従えば、すべての単語ベースのキーがこれらの動作を示すでしょう。したがって、M+ はf単語単位で前進するのをやめ、1 つ[A-Za-z0-9]の完全なシェル引数の前に移動します。

フルシェル引数を一度に削除する方法を要求しましたが、他の動作は言及していないので、次のことができます。

autoload -U select-word-style
select-word-style normal

zle -N backward-kill-shell-word backward-kill-word-match
zstyle :zle:backward-kill-shell-word word-style shell

bindkey '^w'  backward-kill-shell-word

これにより、新しく作成されたzshウィジェットにCtrl+がバインドされます。明らかに、これに別のショートカットを使用するには、バインディングキーの最初のパラメータを調整する必要があります。バラよりWbackward-kill-shell-wordzsh ドキュメントもっと学ぶ。

注:異なる端末エミュレータは、同じキー入力に対して異なる16進コード/エスケープシーケンスを送信します。私の場合は、実際にCtrl+(BackspaceMacではCtrl+)を使いたかったですDeleteこれは些細なことではありませんCtrl+Backspace特別な心配いっぱいです。私の場合(macOSのiTerm2)には実際に必要でした。合成エスケープシーケンスの作成と送信for Ctrl+はDelete私が望む動作を取得します。それでは私の^[[27;6;8~勝手にしてください。bindkey.zshrc

私はこの質問に答えるために私が使用した3つの答えがすべて人間の巨人であるザイルズから来たことを指摘したいと思います。ありがとうございます!

関連情報