screenまたはtmuxで最も競合しないプレフィックス/エスケープシーケンスは何ですか?


96

画面にはCtrl+ が付きAます。一方、画面内で開発されたtmuxはCtrl+を使用しBます。ただし、両方のキーストロークは、エディター、シェルなどでも使用されます。したがって、どちらかを選択すると、tmuxまたは画面内で使用した場合、これらのツールのユーザーエクスペリエンスと機能が低下します。

他のプログラムやシェルのキーバインディングと競合するプレフィックスは何ですか?


6
「他のプログラムとの競合が最も少ないのはどれですか?」意見とは何の関係もありません。
iconoclast

変更後~/.tmux.conf、変更を有効にするためにtmuxサーバーを再起動することを忘れないでください(superuser.com/q/188491/105108)。
ks1322

プレフィックスを使用する代わりに:一部の端末は、「tmux -CC」(つまり、macOSのiTerm2)を介してtmux統合を提供します。そのようにして、tmuxウィンドウは端末にタブとして表示されます。次に、端末プログラムと競合しないタブの管理にキーバインドを使用できます。つまり、cmdキー(別名スーパーキー、windowsキー)を使用します。
cjay

回答:


48

キーボードレイアウト上で便利な位置にある場合^\(別名^|)が最適だと思います。他のプログラムでの使用は非常にまれです。

  • SIGQUITプロセスに送信する
  • ^Cインターセプトされたときにシェルでforループまたはwhileループを中止する
  • toggle-input-method emacsで

他の用途は知りません。慣れていない、tmuxまたは誤ってプロセスを強制終了しないように注意してくださいscreen。それは数年に一度だけ私に起こった。

~/.tmux.conf

unbind-key C-b
set -g prefix 'C-\'
bind-key 'C-\' send-prefix

~/.screenrc

escape ^|^|

私はこれを試してみましたが、tmuxはC-`. Can I escape the どういうわけか `文字の使用について文句を言いますか?
ジェイソン

2
他の人に知らせるため'C-\'に、tmuxの設定で `C- \`の代わりに書くべきです。
gns-ank

2
新しい設定を試してみることが終わったら「tmuxは、ソース・ファイル/path/to/tmux.conf」に忘れてはいけない
user72923

12
しかし、その後...私はそのコマンドの習慣に取得し、私は私が画面にいることを忘れたときに、私が誤ってSIGQUITsの送信を開始
Kache

3
「キーボードレイアウトの便利な位置にある場合」はデフォルトではありませんが、C- \を便利にする、使用中の一般的な再マッピングがあることを意味していますか?
storypixel

53

tmuxでバックティックをエスケープとして使用する場合は、次を追加します。

unbind C-b
set -g prefix `
bind-key ` send-prefix

最後の1つは重要です。それ以外の場合、他の目的でバックティックを入力することはできません:-)


SQLを貼り付けるまで、Backtickは良いアイデアのようです...-
Synchro

3
tmux 1.8の@Synchroは、デフォルトでオン(1msに設定)になっているassume-paste-timeオプションのおかげでもう問題ではありません。ここを参照してください:sourceforge.net/p/tmux/tmux-code/ci/...
sickill

この質問は$()、シェルではなくバックティックを使用することに慣れてから問題を引き起こし始めたため、バックティックに代わるものを探しています。また、多くのMarkdownを書き始めると苦痛になります。私はそれを数年間使用していますが、残念ながら今すぐ変更する必要があります。
キレラギン14

4
.tmux.confにもありbind-key C-a set-option -g prefix C-aます。バックティックを使用する必要があるたびに`-Ctrl-a、プレフィックスをに設定しC-aます。そして、私は戻って行くbind-key C-b set-option -g prefix `ことができますのでC-a-C-b
ボリス

マークダウンを書いている場合はどうなりますか?プレフィックスをどのようにエスケープしますか?
OJFord

21

Ctrl + Aは、EmacsモードでのBashなど、Emacsで問題を引き起こすことでも知られています。これはあなたにとって問題ではないようです。

Ctrl + Oは私が見たもう1つのオプションです。確かに、これはRatPoisonのデフォルトです(これはマウスを必要としないXウィンドウマネージャーです)。ネストされた画面を使用するときは、Ctrl + Oを使用しました。外側の画面にはCtrl + O、内側の画面にはCtrl + Aです。うまくいったが、同僚を怖がらせた。:-)

Emacsではなくviを使用する場合、いくつかの選択肢があります。たとえば、Ctrl + Gはあまり使用されません。


8
Emacsユーザーの場合、Ctrl + Oが最適です。emacsでは「カーソルで新しい行を開く」だけで、bashでは「コマンドシーケンスを繰り返す」だけです。
フロー

2
右利きのctrl操作で問題がなければ+1、これは良いバックアップのように見えます。私は左利きです;-)
DaveParillo 09年

9
Ctrl + Oがvimを破壊すると思う
Mu Qiao

14
@MuQiaoに同意します。Vimでは、Ctrl-oを使用して古いカーソル位置(多くのIDEの戻るボタンに相当)にジャンプします。これは、Vimでコードを参照するときに頻繁に使用する機能です。Ctrl-bはVimのPageUpと同義です。VimではCtrl-bをまったく使用しません。したがって、私のようなVimユーザーにとっては、Ctrl-oよりもCtrl-bの方が適しています。CjはVimのjまたは<Down>と同義であり、Vjで1行下に移動するのにCjを使用しないため、プレフィックスキーとしてCjを使用します。私は私の〜/ .tmux.confでこれを持っている:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susamパル

C-jCtrlPと競合します。バッファリストを上下に移動するにはC-kC-jそれぞれ
-blockloop

14

CAPS-LOCKグローバルにマッピングされましたESC。次に、プレフィックスにM-Space(つまりCAPS-LOCK+ Space)を使用します。


私はこれをやろうとしていますが、CAPS-LOCK(次のコマンドなどについて)tmux(またはiTerm)を押したままにして、何が原因であるかわからない場合、ESCコマンドを繰り返し受信し、M-Space動作しなくなります。その繰り返しキーの問題を無効にする方法はありますか?例えば、それは私がすぐに押したときに動作しますCAPS-LOCK + Spaceが、私がダウンして保持している場合ではないCAPS-LOCK秒ほど、その後のためには、押しSpace、それは登録されませんM-Space...和音を
ブルーノ・エリー

12

私はスクリーンに複雑なシステムを使用しています。デフォルトのエスケープは、バックティックである\ 140 \ 140に設定されています。Ctrl-Aは、Zsh内でのEmacsとコマンドラインの編集の両方を複雑にし、私はCtrl-O(ほとんどの画面アクションでの両手操作)が嫌いです。

「s」を画面1に再バインドして、新しいセッションが1から始まるキーボード上で左から右に作成されるようにします。これにより、永続ウィンドウまたは参照ウィンドウと見なす画面0を予約できます。(バックティック)1、(バックティック)2、(バックティック)3への非常に迅速な片手ジェスチャーで、ウィンドウ間をスワップします。

UNIX環境でbacktickを使用する場合の問題は、シェル/ perlスクリプトコードをカットアンドペーストしようとした場合です。このため、エスケープ文字を切り替えるためにF11 / F12キーをバインドします。

bindkey -d -k F1        escape ^O^O # bound to F11
bindkey -d -k F2        escape \140\140 # bound to F12

これにより、カットアンドペースト操作を行うときに、エスケープがCtrl-Oにスワップされます。ダブルティックを押すのは簡単であり、ほとんどの画面操作では適切なトレードオフであることがわかりました。

F12を押してモードを切り替え、キャプションを使用してモードを示すことができる新しいソリューションでこの答えを再検討してください。

## command characters
escape \140\140                 # default is `

## sets caption and escape toggle
bindkey -d -k F2 process a     # bound to F12

## initial caption
caption always '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{-b .c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '

## registers to toggle bindkeys
register a "\140:eval 'bindkey -d -k F2 process b' 'process c' 'escape \\017\\017'^M"
register b "\017:eval 'bindkey -d -k F2 process a' 'process d' 'escape \\140\\140'^M"

## registers to change captions
register c "\140:caption string '%{= kW}%?%F%{+b mW}%:%{= kK}%? %= %?%F%{.c}ALT%{-}%? | %-w%{KW}%n* %t%? @%u%?%{-}%+w '^M"
register d "\017:caption string '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{.c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '^M"

創造的なソリューション。私が感銘を受けた。
staticsan

bind-key -n F11 set -g prefix `bind-key -n F12 set -g prefix Co
ミルキーポストマン

1
tmuxのprefix + other_keyコンボにある種の最小タイムアウトを設定する方法はありますか? ?
病気

11

私はで使用Ctrl-Qtmux、それは今のところうまくいきました。ただし、シェルフロー制御と競合することに言及する必要があります。デフォルトでCtrl-Qは、で停止した後に出力を再度有効にするために使用されますCtrl-S。偶然に打った後、数回スタックしたシェルに驚いたのでCtrl-S、私は押さないことを学びましたCtrl-S

(フロー制御を完全にオフstty -ixonにしたり、異なるキーをstty startとにバインドしたりすることもできますstty stop。)

# tmux.conf
unbind C-b
set -g prefix C-q

このバインドを採用しましたが、非常に便利です。ありがとう!
aymericbeaumet

私のお気に入りは、端末制御フローなどを常に無効にしているためです。
ジャックオコナー

2
のemacsで使用されquote-insertedます。(emacsの中)のサンプルを使用:私は次のタブ文字を検索したい場合は-<Ctrl-s>+<Ctrl-q>+<TAB>
nhed

6

入力^Spaceするのが最も簡単なプレフィックスであることがわかったため、非常に特殊な/一般的な操作を予約したいのですが、今prefixtmuxのようにマップしようとしています。

入力するコマンドにすぐにジャンプできるように、指を自由に残します。試してみる。


3
それは長くは続かなかった-私は^ jに戻った。^ Spaceは、OSXレベルのアプリ(Spotlight、QuickSilver、DTerm)を起動するために使用するコマンドにあまりにも似ています。
テラス

私もCjを使用しています。〜/ .tmux.confでこれを使用します:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal 14

1
私もC-Spaceを使用していますが、他のほとんどの場所では使用されていません。
mahdix

1
私はChromebookの上だとしてC-スペースは、私にとっては完璧です:D
エリック・グエン

6

遅ればせながらの提案: ctrl-sctrl-s多くの利点があります:

  1. ホーム行。
  2. まだ近くにctrl-a(実際には、ほとんどたtypersのために、それは彼らが使用したのと同じ2本の指を使いますctrl-a)、これから筋肉の記憶のスイッチctrl-aにはctrl-s簡単です-私にとって、それは最初にそれをしようとする程度時間以内第二の天性になりました。
  3. ctrl-aemacsスタイルの「行頭に戻る」操作またはvimスタイルの「番号の増分」操作のために解放します。または、組み込み画面インスタンスを制御するためにプレフィックス文字をエスケープすることを心配することなく、tmuxペイン内で画面を実行するために。(私はしばしば、画面を実行するリモートサーバーへのsshセッションを含むペインでローカルtmuxを使用してこれを行います)
  4. 他の一般的に使用される端末機能に対して、エスケープ要件をオーバーライドまたは追加しません。 現在、大多数の人が使用しているものはctrl-sではありません

もちろん、何もCTRL-Sにしないことを理由に、端末には、それは伝統的に、フロー制御のために使用されているように、ページング・ツールの前に戻っ日にさかのぼることですmoreし、less一般的でした。一部のGUIターミナルプログラムでは、デフォルトでフロー制御機能が有効になっているはずですが、実際にはこれにぶつかっていません。私が試したすべてのguiターミナルプログラムは、デフォルトで完全に無視しているようです。これにより、便利なキーの組み合わせがより生産的に使用できるようになります。

したがって、実際に(たとえば)raw Linuxターミナル内からではなく、GUIベースのターミナルからscreen / tmuxを使用している場合はctrl-s、試してみることをお勧めします。tmuxとscreenでzip圧縮することは、私にとってずっと便利です。


4
Ctrl-sは前方検索です。Ctrl-rで遠くに行くと:)
ジャックオコナー

Ctrl-Sは、コンソール出力を停止するために一般的です(別名「フリーズ」)。これをリマップしようとしたときに私は噛みつきました。
デイブ

5

競合のないキーC-zは、通常、プログラムをバックグラウンドに送信して、それを起動したシェル上で別のことを続行するために使用されるためです。tmuxがあるときは、これを行いません。


私がCzを使用していた唯一の問題は、他のほとんどの人がCbを使用しているため、他の人のマシンでペアプログラミングを行っているときに筋肉の記憶がオフになることですfg
スティーブヨルゲンセン

Czの素晴らしい考えは、Caを使いたくないと仮定すると、最近のほとんどのノートブックコンピューターのキーボードで唯一のコントロールキーである左Ctrlキーに非常に近いということです。Ctrlキーにマップされている場合は、Caps Lockの近くにもあります。Escキーが扱いにくい場所にあるKinesis Freestyle Soloキーボードをよく使用するため、Caps LockをEscにマップします。
スティーブヨルゲンセン

4

`(バックティック)が使用されていることを聞いたので、実際のバックティックのために2回入力する必要があります。(Caps Lockを実行しない限り)アクションに慣れているviユーザーにとっては良いかもしれません。


tmuxのバックティックをどのように定義できますか?
アレクサンドル・ニゾー

Cbのバインドを解除します。set -g prefix ' '; bind '' send-prefix; 上記のダレンホールの回答を参照してください。
ブルーハバナ

私は約1年間バックティックを使用していますが、2キー/コンボプレフィックスに戻ることはありません。試してみる。
病気の病気

4

をお勧めしますC-j。これは、viやemacsにあまり干渉しません。基本的に、私はスサムパルのコメントに同意します。これは答えとして表示する価値があると思われます。他の人はすべて私の観点から重大な対立があるようです。

CjはjまたはVimと同義であり、Vimで1行下に移動するのにCjを使用しないため、プレフィックスキーとしてCjを使用します。〜/ .tmux.confにこれがあります:

set -g prefix2 C-j; bind-key C-j send-prefix -2


1
あなたの推奨に基づいて、私はしばらくの間Cjを使用していますが、見つかった唯一の競合はCtrlP vimプラグインとの競合です。CjとCkは、それぞれオプションを上下に移動するために使用されます。
ブロックループ

3

プログラマーのDvorakキーボードレイアウトの場合、マイナス(ダッシュ)キーをプレフィックスとして使用するのは非常に適切です。つまり、ctrl+ -です。
マイナスキーは、qwertyレイアウトの単一引用符キーの位置にあります。また、Ctrlキーとしてロックキーの機能を制限しました。以下は、プレフィックスとして設定するためのtmux confです。

unbind C-b
set -g prefix C-_
bind C-_ send-prefix
bind - last-window

マイナスの代わりにアンダースコアが使用されるのはなぜでしょうか?Tmuxを参照してください:Cにバインドするにはどうすればよいですか(コントロールマイナス)?
qwertyには、tmuxプレフィックスキーをC- 'にバインドするにはどうすればよいですか?同じショートカットを保持するためのソリューション。

Vim / Neovimを使用している場合、これは完全なプレフィックスです。ctrl+ actrl+ などの接頭辞は、bどちらの方法でもVimの機能をシャドウ(オーバーラップ)するためです。


2

個人的にbCtrl、私にとっては遠すぎます。tmuxを使用するときは、常にバインディングをCbからCaに変更します。Caとの主な競合はすべてを選択することですが、tmuxを使用するプログラムに問題があることはわかりません。


実際、デフォルトを使用し(画面では、tmuxを試したことはありません)、まだ変更する必要がありません。
いんちきキホーテ2009年

2

GNU emacs、zsh、およびMS Windowsユーザーとして、Control-Tを使用します。(例えば、.screenrc :)

エスケープ「^ T ^ T」

はい、Control-Tには、Ubuntuのaptitudeのプルダウンメニューや、Emacsのトランスポーズ文字のような何かがバインドされています。

Coを無視したのは、両手が必要だからです。


2

最善の解決策は^ Cだと思います。Emacsは^ Cをプレフィックスキーとして使用します。シェルで^ Cを入力する必要がある場合は、とにかく2を入力します。:-)

unbind-key C-b
set -g prefix C-c
bind-key C-c send-prefix


1

バックティックを使用できます。tmuxの一部の古いバージョンはバックティックをサポートしていないため、次の方法で回避策を実行できます(ただし、C-`、C-@、C-spaceを同時にメタとして追加できます)。

# meta prefix - @ - backtick
unbind C-b
set -g prefix C-@
bind C-@ send-prefix
bind C-@ last-window

私は通常、CapsLockをCtrlに再マップします。そのため、バックティックでさらに意味があります。


私もこれを使用します。C-Spaceは非常に簡単に入力できます。
kzh 14

バックティックはかなり良いです。ただし、最終的には端末フレンドリーではありません。Linux上のxtermで間違いを犯すことは絶対にありませんが、puttyやiTerm2(macos)などの端末では、適切にエミュレートする問題があります。幸いなことに、iTerm2では設定で回避できます。私はwindows / puttyをあまり使用しないので、ctrl-spaceは実行可能な回避策のようです。:)
アレックス14

1

ここのほとんどの回答では、キーの組み合わせの一部としてCtrlを使用しています。
Ctrlキーを使用すると、常に指を広げてCtrlキーを押す必要があったため、小指が傷つき始めました。
Alt-jは左親指と右人差し指で入力したものを使用します。これは非常に便利です。また、他のプログラムとの衝突もこれまでに発見していません。

unbind C-b
set-option -g prefix M-j

1

GNUスクリーンの場合、バックティックをエスケープにマッピングするために、〜/ .screenrcの次のコードが役に立ちます。

escape ``

0

接頭辞としてctrl- \バインドする提案が好きですが、これをLinux Mint 12で機能させるためには、バインドの下部の場所をエスケープする必要がありました。そうでなければ、それはかかりません。ここで私の.tmux.confを参照してください:emacsとvimの両方でtmuxを使用する


順序が変わる可能性があるため、回答を「上」および「下」と呼ばないでください。代わりに答えをリンクしてください。ご回答ありがとうございます:)
フロー

0

Macユーザーは§バックティックよりも便利だと思うと思います。

上のMac以外のキーボード、バッククォートは、同じキー程度に位置している§Macのキーボード。したがって、バックティックの使用を提案する人々と同じ利便性を体験するには、Macキーボードの段落記号を使用します。

Macキーボードでバックティックを使用するのは、左(⇧)シフト、(⌃)コントロール、および(⌥)Altキーの非常に近くにあるため、注意が必要です。MacBookの場合、左fnキーの近くでも。



さて、あなたはここにポイントを持っています、私はApple Mac USキーボードレイアウトを意味しましたが、フル拡張キーボードまたはMacbookキーボードに関係ありません。
厄介な
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.