에서 창을 창 목록의 맨 위로 이동하고 다른 모든 창을 아래로 밀어 screen
입력 할 수 있습니다 C-a :number 0
. 에 해당하는 명령 순서는 tmux
무엇입니까? 맨 페이지를 보았지만이 시점에서 혼란 스럽습니다.
에서 창을 창 목록의 맨 위로 이동하고 다른 모든 창을 아래로 밀어 screen
입력 할 수 있습니다 C-a :number 0
. 에 해당하는 명령 순서는 tmux
무엇입니까? 맨 페이지를 보았지만이 시점에서 혼란 스럽습니다.
답변:
swap-window
명령은 당신이 원하는에 가장 가까운.
"접두사는"(즉 Ctrl+ B, :기본적으로)을 TMUX - 명령 프롬프트로 제공합니다. 거기에 입력하십시오 :
swap-window -s 3 -t 1
창 번호 3과 창 번호 1이 위치를 바꾸도록합니다.
현재 창을 상단 창으로 바꾸려면 다음을 수행하십시오.
swap-window -t 0
인덱스 0에 창이없는 경우는 다음과 같이하십시오.
move-window -t 0
(기본 색인이 0 인 경우 기본 색인이 0 인 경우).
다음에 다음을 추가하여 해당 명령을 키 (예 : "top"의 경우 T)에 바인딩 할 수 있습니다 ~/.tmux.conf
.
bind-key T swap-window -t 0
move-window
지정된 색인에 다른 창이없는 경우에만 작동합니다. 따라서 move-window -t 0
대개 해당 위치에 다른 창이 이미 있기 때문에 대부분의 경우 작동하지 않습니다.
movew
.
Gareth의 답변에 다음과 같은 키 바인딩을 사용할 수 있습니다.
bind-key -n C-S-Left swap-window -t -1
bind-key -n C-S-Right swap-window -t +1
Ctrl + Shift + 왼쪽을 누르면 (현재 창을 왼쪽으로 이동합니다. 마찬가지로 오른쪽입니다. 수정 자 (Cb)를 사용할 필요가 없습니다.
-1
과 +1
구문은 점유 된 인덱스 문제를 해결하는 데 도움 이 됩니다. tmux는 다른 창을 자동으로 전환하고 이벤트가 자동으로 종료 / 시작됩니다. 이것이 가장 좋은 대답입니다.
bind-key S-Left swap-window -t -1
. 그래서 프로그램의 키 바인딩을 엉망으로 만드는 것을 좋아하지 않기 때문에 <prefix> shift + arrow를 수행 할 수 있습니다.
bind-key -n C-H swap-window -t -1
bind-key -n C-S-Left swap-window -t -1
있지만 @MatthewMitchell이 제안한 접두사를 사용할 때 정상적으로 작동합니다.
에 해당하는 tmux :number 42
는 :move-window -t 42
입니다.
:move-window
는 screen과 동일 하지 않습니다:number
. :number
대상이 있으면 스왑하고이 경우 :move-window
실패합니다. 당신은 사이에서 선택을해야 :move-window
하고:swap-window
당신은에 상응를 구현할 수 screen
의 number
사이에서 선택 외부 쉘 스크립트를 사용하여 명령 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
-F
하고 내 tmux 버전에서 허용하지 않는 옵션을 제거했습니다 .
swap 창을 사용하여 임의의 id로 이동
# window movement / renumbering like in screen's :number
bind-key m command-prompt -p "move window to:" "swap-window -t '%%'"
[m for move-> prefix-m을 누르고 say 3을 입력하십시오. 창을 3으로 다시 번호 매기기]
의 가장 간단한 해결책 man
은 기본 바인딩을 사용하는 것입니다.
{ Swap the current pane with the previous pane.
} Swap the current pane with the next pane.
내가 사용하는 접근 방식은 약간의 Ashish의 답변과 piec의 답변을 결합합니다. 첫 번째 또는 마지막 창이 아닌 한 창을 왼쪽 또는 오른쪽으로 이동하는 빠른 작은 쉘 콜 아웃에 왼쪽 및 오른쪽 화살표가 바인딩되어 있습니다. 마지막 창에서 스왑 +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'
마지막 창을 사용하지 않는 index-0으로 일시적으로 이동 한 다음 move-window -r 을 호출 하여 1부터 다시 번호를 다시 매 깁니다. 첫 번째 창을 끝으로 이동할 때도 비슷하게 작동합니다. 절대 사용하지 않을 거대한 숫자를 선택하면 move-window -r 이 다시 실행될 때 모든 것이 예상대로 번호가 매겨집니다. refresh-client -S 에 대해 궁금한 경우 이동 창 에서 재정렬 이 제대로 작동하지만 추가 변경이 이루어질 때까지 상태 표시 줄이 업데이트되지 않기 때문에 필요합니다. 상태 표시 줄 (-S) 만 새로 고치면이를 피할 수 있습니다.
이 방법으로 찾을 수있는 유일한 문제는 스왑 창이 마지막으로 사용한 창을 스왑 창으로 암시 적으로 변경한다는 것입니다. 따라서 1 번 창에있는 경우 4 번 창으로 전환하여 1 번 다시 이동하면 마지막으로 사용한 창이 1 번 대신 새 4 번 (이전 3 번)임을 알 수 있습니다. 이 문제를 해결할 방법이없는 것 같습니다.
TMUX-통증 제어가 제공 ctrl-b >
하고 ctrl-b <
감싸, 포커스 윈도우로 오른쪽과 왼쪽으로 이동.
모두 swap-window -s 5
와는 swap-window -t 5
의미는 다른, 창 5 현재 창을 교환합니다.
swap-window -s 5
swap-window -t 5
number
에서은 swap-window -s number
과 -t number
모두 일 수 절대 5 예 및 상대 +2, -1, 예.
아래 PS
는 tmux 상태 표시에서 발췌 한 것으로swap-window -s 5
충적세:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
지금, 후에 last-window
:
[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
이후 swapw -s 5
:
[0] 0:mc* 1:mpl 2:py2- 3:numpy 4:plot 5:vim
다른 swapw -s 5
:
[0] 0:vim* 1:mpl 2:py2- 3:numpy 4:plot 5:mc
다른 last-window
:
[0] 0:vim- 1:mpl 2:py2* 3:numpy 4:plot 5:mc
이것이 내가 사용하는 방법입니다. 여전히 창을 점유 된 인덱스로 이동할 수는 없지만 한 인덱스를 더 높은 (미사용 인덱스)로 옮기고 이전 인덱스가 있던 간격으로 다시 정렬 할 수 있습니다.
3 개의 창이 있고 이전에 3이 있던 곳에 4 번째를 추가하고 싶다고 가정 해 봅시다.
새 창을 추가하기 전에 : Tmux prefix then. 이동 명령을 엽니 다. 4를 입력하면 색인 3이 4가되고 다른 창을 추가하기 만하면 색인 3이되고 이전 창은 여전히 색인 4가됩니다.
먼저 tmux 명령을 눌렀다 놓습니다.
Ctrl + b
실제 창을 오른쪽 창으로 (원형 순서로) 변경하려면 다음을 수행하십시오.
}
실제 창을 왼쪽으로 변경하려면
{
SHIFT
누를 때 사용하는 것을 잊지 마십시오 .}
{
가치있는 것 :
"TUI"로 모든 창을 주문할 수 있도록이 스크립트를 함께 해킹했습니다. 모든 창을 임시 파일로 나열하고 기본 편집기로 엽니 다 ($ EDITOR를 설정했다고 가정). 그런 다음 줄을 다시 정렬 할 수 있으며 파일을 저장하고 닫은 후에는 창 순서가 변경됩니다. (이 작업을 수행 할 때 커밋을 주문하는 것과 유사합니다 git rebase -i
)
#!/bin/bash
# Usage: tmux-mv
# Move your tmux windows around in an editor
tmpfile=$(mktemp)
tmux list-windows > $tmpfile
$EDITOR $tmpfile
# Move all windows to 50..x in the order you just specified
# Assumes you don't have 50 windows already(!)
cat $tmpfile | awk -F ":" '{ print " -s " $1 " -t 5" NR-1 }' |\
xargs -I {} sh -c 'tmux move-window -d {}'
# Move them back down, retaining the order
tmux move-window -d -r
rm $tmpfile
특히 다음과 같이 많이 향상 될 수 있습니다.
참고 : 명령을 실행 한 후 다른 창으로 이동할 수 있습니다.
여기에 대한 답변 중 어느 것도 나를 만족시키지 못했기 때문에에 대한 screen
창 이동 동작을 모방 한 스크립트를 작성했습니다 tmux
.
그것은 대상 창 번호인지 여부를 감지 작은 또는 작은 창 수 있다는 큰 가장 큰 창 수보다, 그래서 경우는, 오른쪽으로 다른 모든 창을 유도합니다 또는 점진적 1-N에서 그들을 왼쪽 (각각) 및 재 번호 . 이것은 move-window
명령 으로 수행됩니다 .
창 번호가 가장 작은 / 가장 큰 숫자 사이에 있는 경우 (즉, 기존 창 번호와 일치 할 수 있음) swap-window
명령 과 해당 창을 교체합니다 .
스크립트는 다음과 같습니다.
#!/usr/bin/env bash
# Filename: ~/tmux-windowswap
# Function that provides improved window-swapping functionality for tmux
maxwin="$(tmux list-windows | cut -d: -f1 | sort -nr | head -n1)"
minwin="$(tmux list-windows | cut -d: -f1 | sort -n | head -n1)"
# Error checking
if [[ -z $2 ]]; then
echo "Error: No window specified."
elif [[ ! $2 =~ ^-?[0-9]+$ ]]; then
echo "Error: Bad window number specified."
# Bigger than everything; slide it to the far right, then renumber
elif [[ $2 -gt $maxwin ]]; then
i=0 # intialize
tmux move-window -t:$(($maxwin+1))
winlist="$(tmux list-windows | cut -d: -f1 | xargs)"
for n in $winlist; do
i=$(($i+1)) # increment
tmux move-window -s:$n -t:$i
done
# Smaller than everything; slide it to the far left, then renumber
elif [[ $2 -lt $minwin ]]; then
tmux move-window -t:0
winlist=($(tmux list-windows | cut -d: -f1 | xargs | rev))
i=${#winlist[@]} # initialize; start at highest indexed window
for n in ${winlist[@]}; do
tmux move-window -s:$n -t:$i
i=$(($i-1)) # decrement
done
# In-between; just a simple swap
else
tmux swap-window -t:$2
fi
그런 다음이 간단한 키 바인딩을 다음에 추가하십시오 .tmux.conf
.
bind m command -p "Send window to:" "run -b '~/tmux-windowswap #I %1'"
참고 : screen
창 스와핑 동작 을 완벽하게 모방하기 위해 창을 기존 창 번호 로 이동하면 해당 창을 가져 와야하고 다른 모든 창은 오른쪽으로 이동 합니다. 이 스크립트를 수정하여 수정하는 것은 매우 간단합니다.
C-b
,.
당신이 윈도우 번호를 다시 할 수 있습니다.