題 屏幕或tmux的最小衝突前綴/轉義序列是什麼?


屏幕配合 按Ctrl+一個。另一方面,tmux - 在屏幕用途中開發 按Ctrl+。但是,這兩種擊鍵也用於編輯器,外殼等。因此,在tmux或屏幕中使用時,選擇任何一種擊鍵都會降低這些工具的用戶體驗和功能。

什麼前綴與其他程序和shell的鍵綁定最少衝突?


86


起源


“哪一個與其他節目衝突最少?”與意見無關。 - iconoclast
改變之後 ~/.tmux.conf 不要忘記重啟tmux服務器以使更改生效(superuser.com/q/188491/105108)。 - ks1322


答案:


我認為 ^\ (亦稱 ^|如果它在鍵盤佈局上處於方便的位置,則是最好的。它在其他程序中的用途非常少見:

  • 發出 SIGQUIT 一個過程
  • 在shell中中止for或while循環時 ^C 截獲
  • toggle-input-method 在emacs中

我不知道有任何其他用途。小心不要意外殺死外面的進程 tmux 要么 screen 習慣了之後。它發生在我身上只有幾年一次。

~/.tmux.conf

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

~/.screenrc

escape ^|^|

46



我試過這個,但tmux抱怨使用 C-`. Can I escape the 不知何故? - Jason
只是為了讓其他人知道,你應該寫 'C-\' 而不是tmux配置中的`C- \`。 - gns-ank
完成後嘗試新設置時不要忘記'tmux source-file /path/to/tmux.conf' - user72923
但後來我養成了那個命令的習慣,當我忘記我在屏幕上時,我開始意外地發送SIGQUITs ...... - Kache
“如果它在你的鍵盤佈局上處於一個方便的位置”,默認情況下它不是,你是否暗示你正在使用一些流行的重映射使得C-方便? - storypixel


對於想要在tmux中使用反引號作為轉義的人,你需要添加:

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

最後一個很重要,否則你不能為其他目的鍵入反引號:-)


43



Backtick似乎是一個好主意,直​​到你粘貼一些SQL ... - Synchro
@Synchro on tmux 1.8由於假定粘貼時間選項默認打開(設置為1ms),因此它不再是問題。看這裡: sourceforge.net/p/tmux/tmux-code/ci/... - sickill
我發現這個問題正在尋找反引號的替代方法,因為它在我習慣使用反引號後開始引起麻煩 $() 在貝殼裡。一旦你開始寫很多Markdown,它就會變得很痛苦。我已經使用它好幾年了,不幸的是我現在必須改變它。 - kirelagin
在.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 回去 - boris
如果你正在寫降價怎麼辦?你怎麼逃避前綴? - OJFord


還知道Ctrl + A會導致Emacs出現問題,包括Emacs模式下的Bash。聽起來這對你來說不是問題。

Ctrl + O是我見過的另一個選項。顯然,這是RatPoison的默認設置(這是一個不需要鼠標的X窗口管理器)。我在使用嵌套屏幕時使用了Ctrl + O:Ctrl + O表示外部屏幕,Ctrl + A表示內部屏幕。工作得很好,但有點害怕我的同事。 :-)

我只是想,如果你使用vi而不是Emacs,還有一些選擇。例如,Ctrl + G沒有被使用太多。


20



對於Emacs用戶,Ctrl + O似乎是最好的選擇:在emacs中它只是“在光標處打開一個新行”並在bash中“重複命令序列”。 - Flow
如果你對右手ctrl操作沒問題,那就+1,這看起來像是一個很好的備份。我自己是左撇子;-) - DaveParillo
我認為Ctrl + O打破了vim - Mu Qiao
我同意@MuQiao。在Vim中使用Ctrl-o跳轉到較舊的光標位置(相當於許多IDE中的後退按鈕),這是我在Vim中瀏覽代碼時經常使用的功能。 Ctrl-b與Vim中的PageUp同義。我在Vim上根本不使用Ctrl-b。所以對於像我這樣的Vim用戶來說,Ctrl-b仍然是比Ctrl-o更好的選擇。我使用C-j作為我的前綴鍵,因為C-j與V中的j或<Down>同義,沒有人使用C-j在Vim中向下移動一行。我在〜/ .tmux.conf中有這個: set -g prefix2 C-j; bind-key C-j send-prefix -2 - Susam Pal
C-j 與CtrlP衝突。上下移動緩衝區列表使用 C-k 和 C-j 分別 - blockloop


我有 CAPS-LOCK 全局映射到 ESC。然後,我用 M-Space (即。 CAPS-LOCK+ Space)為我的前綴。


12



非常好主意,謝謝分享。 - AhHatem


我使用複雜的系統進行屏幕顯示。我的默認轉義設置為\ 140 \ 140,這是反引號。在Zsh中,Ctrl-A使我的Emacs和命令行編輯變得複雜,我不喜歡Ctrl-O(大多數屏幕操作的2手操作)。

我將's'重新綁定到屏幕1,以便從1開始在鍵盤上從左到右創建新會話。這允許我為我認為持久或參考窗口保留屏幕0。這是一個非常快速的單手手勢(反擊)1,(反擊)2,(反擊)3在窗口之間交換。

在unix環境中使用反引號的問題是在嘗試剪切和粘貼shell / 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"

12



創意解決方案我印象深刻。 - staticsan
bind-key -n F11 set -g prefix | bind-key -n F12 set -g prefix C-o tmux的更新,以防其他人想要調整它。 - milkypostman
有沒有辦法在tmux中為前綴+ other_key組合設置某種最小超時,所以當粘貼代碼時它不會觸發任何命令但是當從鍵盤輸入反引號+鍵時它會這樣做,因為反引號和另一個鍵之間的暫停更長? - sickill


我用 Ctrl-Q 在 tmux 到目前為止它運作良好。不過,我必須提到它與shell流量控制衝突。默認情況下, Ctrl-Q用於在停止輸出後重新啟用輸出 Ctrl-S。在意外撞擊後幾次被卡住的外殼感到驚訝 Ctrl-S,我學會了不要按 Ctrl-S

(人們也可以完全關閉流量控制 stty -ixon,或綁定不同的鍵 stty start 和 stty stop。)

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

11



我已經採用了這個綁定,我發現它非常方便。謝謝! - aymericbeaumet
我最喜歡的,因為我總是禁用終端控制流程的東西。 - Jack O'Connor
在emacs中使用 quote-inserted。示例使用(在emacs中):如果我想搜索下一個標籤字符 - <Ctrl-s>+<Ctrl-q>+<TAB> - nhed


我想保留 ^Space 對於非常特殊/常見的操作,因為我發現它是最容易鍵入的前綴,但是現在我正在嘗試將其映射為 prefix 在 TMUX

它會讓您的手指自由地立即跳轉到您要鍵入的命令。 試試看。


6



這不會持續很長時間 - 我回到^ j。 ^空間與我用來調用OSX級應用程序(Spotlight,QuickSilver,DTerm)的命令太相似。 - terrace
我也用C-j。這是我在〜/ .tmux.conf中使用的內容: set -g prefix2 C-j; bind-key C-j send-prefix -2 - Susam Pal
我也使用C-Space,幾乎沒有在其他地方使用它。 - mahdix
C-space非常適合我,因為我使用的是Chromebook:D - Eric Nguyen


一個遲來的建議: ctrl-sctrl-s 有許多優點:

  1. 在主頁上。
  2. 仍然接近 ctrl-a (事實上,對於大多數打字機,它將使用他們用於的相同的兩個手指 ctrl-a),所以肌肉記憶從 ctrl-a 至 ctrl-s 是微不足道的 - 對我來說,它在第一次嘗試它的約一個小時內成為第二天性。
  3. 放心吧 ctrl-a 對於emacs樣式的“回到行首”或vim樣式的“增量號”操作。或者嘿,用於在tmux窗格內運行屏幕而無需擔心轉義前綴字符來控制嵌入式屏幕實例。 (我經常使用帶有包含ssh會話到遠程服務器的窗格的本地tmux,我在其中運行屏幕)
  4. 不會覆蓋或添加轉義要求到任何其他常用的終端功能。 沒有 今天絕大多數人都在使用ctrl-s!

當然,ctrl-s上沒有任何東西的原因是在終端中,它傳統上用於流量控制,可追溯到分頁工具之前的日子 more 和 less 很常見。我確定某些GUI終端程序默認啟用了流量控制功能,但實際上並沒有碰到一個;我嘗試過的gui終端程序似乎都默認完全忽略它,這使得這種方便的組合鍵可用於更高效的用途。

因此,如果您實際上並未使用來自(例如)原始Linux終端的screen / tmux,而是使用基於GUI的終端,那麼我建議給予 ctrl-s 一試;它在tmux和平面上做得很好,對我來說更方便。


6



Ctrl-s是前向搜索,當我用Ctrl-r遠程時:) - Jack O'Connor
Ctrl-S常用於停止控制台輸出(也稱為“凍結”它)。當我嘗試重新映射它時,這就是我。 - Dave