zshのテキスト挿入バインディング

zshのテキスト挿入バインディング

c-<cr>zshからポイントへの挿入をどのようにバインド(たとえば)しますか?&>/dev/null &<cr>

urxvtを使用しています。

ベストアンサー1

Ctrl2つのステップがあります。ターミナルエミュレータで+に対して別のエスケープシーケンスをエクスポートする必要があり、Returnそのエスケープシーケンスを入力するときに実行するアクションをzshに通知する必要があります。

端末のアプリケーションは一連のバイトを受け取り、そのほとんどは印刷可能な文字または制御文字。ほとんどのファンクションキーとキーコードは、エスケープ文字と押されたキーをエンコードする複数の文字で構成されるエスケープシーケンスでエンコードする必要があります。バラよりキーボード入力とテキスト出力はどのように機能しますか?背景の詳細​​をご覧ください。Ctrl+標準エスケープシーケンスがありませんReturn。ほとんどの端末((U)rxvtを含む)は通常のようにCR文字を送信しますReturn。したがって、Urxvtに別のエスケープシーケンスを送信するように指示する必要があります。 Xリソースファイル(~/.Xresources- を使用してロードxrdb -merge ~/.Xresources)に以下を追加します。

URxvt.keysym.C-Return: \033[27;5;13~

zsh でカスタムコードをキーにバインドするには、コードを関数に記述し、関数を zle ウィジェットとして宣言します。zle -N。あなたの中カスタムウィジェット、可変BUFFER編集中の行の内容を含みます。CURSORカーソル位置を含みます。カーソルの周囲にテキストを挿入するには、より便利な変数があります。LBUFFERカーソルの前に挿入するか、前にテキストを追加します。RBUFFERカーソルの後ろに挿入します。

私の考えでは、あなたがしたいのは、行の末尾にテキストを追加し、現在のコマンドを実行することです。現時点では、コマンドの実行はCR文字を挿入して実行されません。これは単にコマンドにCRを挿入するだけです。通貨ウィジェットaccept-line(デフォルトはCRにバインドされています)コマンドを実行します。

accept-line-run-in-background-with-output-hidden () {
  BUFFER+=" &>/dev/null &"
  zle accept-line
}
zle -N accept-line-run-in-background-with-output-hidden
bindkey $'\033[27;5;13~' accept-line-run-in-background-with-output-hidden

おすすめ記事