在 screen
,我可以打字 C-a :number 0
將窗口移動到窗口列表的頂部並將所有其他窗口向下推一個窗口。什麼是等效的命令序列 tmux
?我查看了手冊頁,但我發現這一點令人困惑。
在 screen
,我可以打字 C-a :number 0
將窗口移動到窗口列表的頂部並將所有其他窗口向下推一個窗口。什麼是等效的命令序列 tmux
?我查看了手冊頁,但我發現這一點令人困惑。
該 swap-window
命令最接近你想要的。
“前綴:”(默認情況下為“Ctrl-B:”)將您帶到tmux-command提示符。你輸入:
swap-window -s 3 -t 1
讓窗口編號3和窗口編號1交換位置。
要將當前窗口與頂部窗口交換,請執行以下操作:
swap-window -t 0
在索引0處沒有窗口的不太可能的情況下,執行:
move-window -t 0
(如果base-index為0,則默認情況下為)。
您可以將該命令綁定到一個鍵(例如T代表“top”),方法是將以下內容添加到您的 ~/.tmux.conf
:
bind-key T swap-window -t 0
添加到Gareth的答案,您可以使用以下鍵綁定
bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1
按Ctrl + Shift + Left(將當前窗口向左移動。同樣正確。無需使用修改器(C-b)。
tmux相當於 :number 42
是 :move-window -t 42
。
您可以實現等效的 screen
的 number
命令使用在其間選擇的外部shell腳本 swap-window
和 move-window
。您可以通過以下方式將其綁定到密鑰:
bind < command-prompt -p index "run-shell '~/.tmux.number.sh %%'"
~/.tmux.number.sh
:
#!/bin/bash
if [ $# -ne 1 -o -z "$1" ]; then
exit 1
fi
if tmux list-windows | grep -q "^$1:"; then
tmux swap-window -t $1
else
tmux move-window -t $1
fi
我重新編號這樣的窗口:
按Ctrl+b, .
, 222
會成為當前的 tmux
窗口(所有窗格)編號222。
相關:當我在洗牌時,我傾向於想做
按Ctrl+b :new-session -d -s "reading"
從那裡我也可以使用 按Ctrl+b, .
, reading
將當前窗口(所有窗格一次)移動到讀取會話。您可以在會話中瀏覽 按Ctrl+b, s
你在會話中瀏覽的方式 按Ctrl+b, w
。
HTH
使用swap-window移動到任何id:[最接近屏幕:數字]
# window movement / renumbering like in screen's :number
bind-key m command-prompt -p "move window to:" "swap-window -t '%%'"
[m for move - > hit prefix-m並輸入say 3。 。將窗口重新編號為3]
由於Ashish Ariga的答案不適用於1.9a及更低版本。我用 <
和 >
通過添加下面的行來分別向左和右交換窗口 .tmux.conf
。
# swap window to left or right
bind-key -r < swap-window -t -1
bind-key -r > swap-window -t +1
對於那些使用的人 byobu
作為tmux的包裝器,您可以將當前窗口與上一個或下一個窗口交換:
Ctrl-Shift-F3
Ctrl-Shift-F4
由...定義的鍵綁定 byobu
對於這些鍵可能有興趣:
bind-key -n C-S-F3 swap-window -t :-1
bind-key -n C-S-F4 swap-window -t :+1
我使用的方法結合了Ashish的回答和piec的一些;我有一個alt-left和右箭頭綁定到一個快速的小shell標註,將窗口向左或向右移動,除非它是第一個或最後一個窗口,尊重。我這樣做是因為,當你在最後一個窗口發出交換+1(或在第一個窗口交換-1)時,它仍然會交換,而不是像你期望的那樣再循環回來:
0:one 1:two 2:three 3:zero*
變
0:zero* 1:two 2:three 3:one
代替
0:zero* 1:one 2:two 3:three
因此,當窗口到達列表邊緣時,我使用的命令停止工作:
bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -t -1'
bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -t +1'
這很容易結合起來 基索引 和 重新編排窗口 有一個從任意數字開始的窗口列表,從來沒有任何差距。
如果你正在使用 基數指數1 像我一樣,你不認為你會超過999個窗口,你可以使用一個小技巧使它正確滾動,雖然命令膨脹了一點:
set -g base-index 1
set -g renumber-windows on
bind-key -n M-Left run-shell 'if tmux list-windows | head -n 1 | grep -q active ; then tmux move-window -t 999 \; move-window -r \; refresh-client -S ; else tmux swap-window -t -1 ; fi'
bind-key -n M-Right run-shell 'if tmux list-windows | tail -n 1 | grep -q active ; then tmux move-window -t 0 \; move-window -r \; refresh-client -S ; else tmux swap-window -t +1 ; fi'
這通過暫時將最後一個窗口移動到未使用的索引-0然後調用來工作 移動窗口-r 從1開始重新編號。當第一個窗口移動到最後時,它的工作方式類似;通過挑選一個你永遠不會使用的巨大數字,它確保了什麼時候 移動窗口-r 再次發射一切都會像你期望的那樣編號。如果你想知道的話 刷新客戶端-S,這是必要的,因為有時候,從重新排序 移動窗口 將正常工作,狀態欄將不會更新,直到進行進一步的更改。通過強制刷新狀態欄(-S),可以避免這種情況。
我能用這種方法找到的唯一問題是 交換窗口 將隱含地將最後使用的窗口更改為您交換的窗口。因此,如果您在窗口#1上,切換到窗口4並將其移回一個窗口,您會發現最後使用的窗口是新的#4(以前是#3)而不是#1。似乎沒有辦法解決這個問題。