私はそれをscreen
かなり多く使用しており、現在のウィンドウの全画面のグローバル開始またはグローバル終了に移動するデフォルトではなく、キーをHome現在の行の開始または終了に移動したいと思います。End歴史。
コピーモードで実行するbindkey -m -k "kh" stuff 0
とbindkey -m -k "kH" stuff $
目的の効果が得られますが、バインディングもコマンド入力モードに影響するため、カーソルが移動する-m
と「0」テキストが挿入され、コマンド入力時に「$」テキストが挿入されるため、コマンド入力時やコマンド使用が効果的無効になります。コマンドバー。HomeEnd
コマンドを入力するために同時にキーを壊さずにこれらのキーを飼いならす方法はありますか?
答え1
まさにここに。 (現在)bindkey
影響を受けるフラグはありませんが、ただコピーモード(コマンドモードではない)でも同様の結果を得る方法がまだあります。しかし、これは新しい構文を学ぶことを意味します。
修理する
これmarkkeys
このコマンドはコピーモードにのみ影響し、コマンドモードの動作には影響しません。許可されている文字はトリッキーですが、存在しないものよりも優れており、この場合は操作が完了します。
markkeys "$=\205"
markkeys "\^=\201"
上記は、screen
行の開始と終了、および信号(およびHomeから送信された)をEndそれぞれキー^と$移動キーにエイリアスとして割り当てるように指示します。通常、エスケープシーケンスをトリガーするために使用されるため、^
エスケープ文字列として作成されますが、文字通り意味します。\^
Home表示される最初の文字の代わりに開始/左端まで移動するには、にmarkkeys "\^=\201"
置き換えますmarkkeys "0=\201"
。
gまた、コピーモードでもGウィンドウ履歴のグローバル開始または終了を取得するために使用できます。
編集内容を見つけた方法
そのようなことに役立つすべての16進エスケープをリストする完全な参照はまだわかりませんが、bindkey -m
行動への関心が消えるまで画面内で実行し、そこでマッピングをオーバーライドして関連項目を2つ見つけることができました。関連する行は次のとおりです。
kh -> stuff \201
kH -> stuff \205
irc://irc.freenode.net/screenの人々の助けを借りて、私はシェルの左側にあるコードを見つけることができることを学びました。man terminfo
このコードは、Tcap列に次のようにリストされています。
Variable Capname TCap Code Description
string
---------------------------------------------------------------------------
key_home khome kh home key
...
key_ll kll kH lower-left key (home down)
2つと2つを合わせて正しいバインディングを得るために少し推測を行うと、上記の修正が発生します。