^qの横にsttyをどのようにリバインドしますか?

^qの横にsttyをどのようにリバインドしますか?

文字を文字通り入力できます。使用

ttyドライバの "lnext"機能(通常デフォルトでは^ V)

ただし、ターミナルエミュレータではCtrl+を「貼り付け」にバインドします。 (制御フローを使用しないため)+にv再バインドしたいと思います。私は次を試しましたlnextCtrlq~/.zshrc

setopt noflowcontrol  # Don't use ^s and ^q for control flow
bindkey -r "^Q"       # Unbind ^q from push-line
stty lnext '^Q'       # Bind ^q to lnext

しかし、うまくいかないようです。 +lnextに再バインドする方法はありますか?Ctrlq

編集する

追加のトラブルシューティングを行いましたが、他のsttyキーを再バインドできないようです。テストのために削除しsetopt noflowcontrolstty start '^A'またはstty start '^B'。どちらも効果がありません。startそれでもCtrl+にバインドされていますq。 (FWIW私は文字通り^Aまたは前の^B文字自体を試しました。)lnext

答え1

stty lnextターミナルデバイスラインルール内部エディタにのみ影響します(このようなアプリケーションを実行すると、cat独自のラインエディタなしで非常に制限されたエディタが得られます)。 zshエディタの場合は、独自のエディタで同じタスクを実行するためにtty LD設定をクエリする(行エディタとは異なり)bindkeyを使用するzle必要があります。readlinebash

stty lnext '^Q' start '' -ixon # for tty LD editor
bindkey '^Q' quoted-insert     # for zle

各端末に対してこの部分を実行する必要があり、sttytty LD設定がデフォルト値(例:以降)に復元されたら、もう一度実行する必要がありますstty sane

一部のシステムでは、HPUXとstty lnext '^Q' < /dev/ttyconf

^Vzsh 行エディタのカーソルに X11 CLIPBOARD 選択項目を貼り付けます。

get-clipboard() {
  local clip
  clip=$(xclip -sel c -o 2> /dev/null && echo .) || return
  LBUFFER+=${clip%.}
}
zle -N get-clipboard
bindkey '^V' get-clipboard

関連情報