質問

質問

私が使った答えzsh は Ctrl+バックスペース、Ctrl+削除を終了します。次のキーバインディングを設定します。

  • Ctrl+ Backspace:現在の単語の先頭まで削除、
  • Ctrl+ Delete:現在の単語の最後まで削除、
  • Ctrl+ Shift+ Delete: 行末まで削除します。

これは、次のコマンドを使用して実行されます。

$ bindkey -M emacs '^[[3;5~' kill-word
$ bindkey -M emacs '^H' backward-kill-word 
$ bindkey -M emacs '^[[3;6~' kill-line  

キー(部品など)をエンコードする方法を理解するために、^[[3;5~回答で詳しく説明されている「トリック」を使用しました。「システムの値を表示するには、Ctrl++C Ctrlを入力してください。」Delete

質問

Ctrl++をコマンドにShiftバインドします(たとえば、カーソルと行の始まりの間のすべての項目を削除します)。Backspacebackward-kill-line

ただし、+++ と入力するとプロンプトCtrlにのみ表示されます。つまり、+と同じキーの組み合わせが表示されます。C CtrlShiftBackspace^HCtrlBackspace

ベストアンサー1

Ctrl端末は+と同じエスケープシーケンスをShift送信するため、zshは2つを区別できません。唯一の解決策は、別のエスケープシーケンスを送信するように端末を設定することです。すべての端末でこれを許可するわけではありません。BackspaceCtrlBackspace

一部の端末(xterm、rxvt、iTerm2、Emacs termなど)では、各キーとコードのエスケープシーケンスを手動で設定できます。端末のドキュメントを参照してください。

たとえば、xtermの場合は、次のコードを.Xresources.load itに配置できますxrdb -merge ~/.Xresources。多くの環境では、ログイン時にそれをロードします。それ以外の場合は、このコマンドをX11スタートアップファイルに追加してください。

XTerm.VT100.translations: #override \
    Ctrl Shift <Key>BackSpace: string("\033[27;6;8~") \n

その後、このエスケープシーケンスを使用できます。

bindkey -M emacs '^[[27;6;8~' backward-kill-word 

端末は以下に基づいています。静脈血栓塞栓症、Gnome-terminal、Guake、および Terminator を含む幸運ではありません。キーバインディングを構成する方法はありません。特定のキーの一時的なサポートを喜んで追加することもできます。しかし。

1互換性のためにこの順序を選択しましたxtermmodifyOtherKeysモード。私は通常を有効にすることをお勧めします。modifyOtherKeysこれはほとんどの場合、以前のバージョンとの互換性のためですが、必要な特定のキーとコードはレベル2でのみ有効になります。これは処理が難しい問題です(たとえば、Ctrl +文字はその制御文字を送信しません)。

おすすめ記事