나는 다른 tmux 키 바인딩 설정을 실험 해 왔으며 다음을 발견했습니다.
tmux 구성을 (tmux 내에서) 다시로드하면 한 번로드 한 키 바인딩이로드 된 상태로 유지됩니다. 이것을 정리하는 유일한 방법은 모든 tmux 세션을 종료하고 다시 시작하는 것입니다. 따라서 tmux는 이전에로드 된 모든 키 바인딩을 기억하고 새로 시작하거나 명시 적으로 바인딩을 해제해야만 제거합니다.
이것을 다시 만들려면 :
- 터미널을여십시오 (A)
- tmux 시작
- 키 바인딩에 시계가 표시되는지 확인 (을 누름
PREFIX C-t
) PREFIX ?
목록에서 키 바인딩을 보려면을 누르십시오.- 편집하다
~/.tmux.conf
- 키 바인딩 추가 (
bind C-t display "Keybinding C-t"
) - tmux 구성 다시로드 (
PREFIX : source-file ~/.tmux.conf
) - 키 바인딩 작동 여부 확인 (을 누름
PREFIX C-t
) PREFIX ?
목록에서 새 키 바인딩을 보려면을 누르십시오.~/.tmux.conf
다시 편집- 키 바인딩을 제거하십시오 (따라서 제거하십시오
bind C-t display "Keybinding C-t"
) - tmux 구성 다시로드 (
PREFIX : source-file ~/.tmux.conf
) - 키 바인딩이 작동하는지 확인 (을 누름
PREFIX C-t
), 여전히 ” 키 바인딩 Ct”를 표시합니다 PREFIX ?
새 키 바인딩이 여전히 목록에 있는지 보려면을 누르십시오.- tmux 종료
- tmux를 입력하십시오
- 원래 키 바인딩이 다시 작동하는지 확인하십시오 (를 누르십시오
PREFIX C-t
). 이제 시계를 다시 표시해야합니다. PREFIX ?
새 키 바인딩이 목록에서 제거되었음을 보려면을 누르십시오.
내 질문 : tmux에로드 된 모든 구성을 “잊어 버린 다음로드하도록 지시하는 방법이 .tmux.conf
있습니까?
답변
tmux(1)
맨 페이지 에 따르면 , unbind-key -a
당신이 찾고있는 것입니다.
tmux
모든 세션이 닫히고 키 바인딩이 서버별로 완료되면 종료되는 서버 를 실행하십시오. 따라서 바인딩을 작성하면 모든 클라이언트 분리에 대해 지속적으로 유지됩니다.
즉, unbind-key -a
구성 파일의 맨 위에 놓고 구성을 다시로드하면 원하는 것을 수행해야합니다. 모든 것을 바인딩 해제하고 처음부터 바인딩을 시작하십시오. 또는 수정 사항이 작은 경우 변경하려는 내용 만 바인딩 해제하십시오.
답변
올바른 해결책
따라서 @peterph는 unbind-key -a
다음을 수행하는 정답을 제시했습니다 . (man tmux)
-a가 있으면 모든 키 바인딩이 제거됩니다.
실행 가능한 솔루션
문제는 (나에게) “모두”가 실제로 모든 것을 의미한다는 것입니다. tmux에는 키 바인딩이 포함되어 있습니다. unbind-key -a
tmux 명령을 즉시 실행하면 더 이상 키 바인딩이 없으므로 명령 모드로 들어가거나 기본적으로 아무것도 할 수 없습니다.
이것에 대한 나의 (추악한) 수정은 다음과 같습니다.
- 크리에이트
.tmux.reset.conf
모든 키 바인딩을 제거하고 기본적으로 가지고 TMUX 모든 사람을 리 바인드 - 당신의 상단에 재설정 소스
.tmux.conf
내 .tmux.conf
:
# always load the reset file first
source-file ~/.tmux.reset.conf
내 .tmux.reset.conf
:
# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key " split-window
bind-key # list-buffers
bind-key $ command-prompt -I #S "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key ' command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I #W "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key ; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-session
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key ~ show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key -r M-1 select-layout even-horizontal
bind-key -r M-2 select-layout even-vertical
bind-key -r M-3 select-layout main-horizontal
bind-key -r M-4 select-layout main-vertical
bind-key -r M-5 select-layout tiled
bind-key -r M-n next-window -a
bind-key -r M-o rotate-window -D
bind-key -r M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R
이것이 내가 tmux 키 테이블에서 작동했을 수있는 것처럼 보였지만 (내가 알 수있는 한) 새로운 키 테이블을 추가 할 수는 없습니다.
답변
현재 키 바인딩을 기본값으로 재설정하는 직접적인 방법은 없습니다. 기본 바인딩의 초기화 (in key_bindings_init()
)는 tmux 서버가 처음 시작될 때 한 번 수행 되며 (in server_start()
) 단일 키를 재설정하는 메커니즘이 없습니다.
구성 파일을 소싱하여 구성 파일에서 삭제 된 사용자 정의 바인딩으로 이전에 대체 된 기본 바인딩을 다시 설정하려는 원하는 시나리오의 경우, 사용자가 고안 한 방법이 합리적입니다 (불행하게도 장황하지만) : unbind-key -a
, 그런 다음 모든 “기본”바인딩을 다시 설정 한 다음 사용자 정의 바인딩을 설정하십시오 (일부 바인딩은 “기본”바인딩을 무시할 수 있음).
서버의 현재 바인딩은 list-keys
명령 * ; 이것은 제안 된 .tmux.reset.conf
파일을 생성 / 유지하는 데 도움이 될 수 있지만 현재 바인딩이 아닌 기본 바인딩 을 추출하는 방법이 필요합니다 .
*의 출력이 몇 가지 상황이 있습니다 list-keys
세미콜론 바인딩은으로 해석되는 것을 방지하기 위해 백 슬래시로 이스케이프의 세미콜론이 필요 : 현재 직접 사용할 수 없습니다 TMUX의 명령을 구분하고, 내부에 큰 따옴표를 사용하여 인수했다 어떤 바인딩 하나는 따옴표 (기본 바인딩은 이와 같지 않음)는 이중 qoutes 안에 큰 따옴표로 나옵니다.
기본 바인딩을 얻으려면 list-keys
출력을 캡처 할 수 있도록 최소한의 구성 (예 : 사용자 정의 바인딩 없음)을 가진 임시 서버가 필요합니다 . 실행할 수있는 tmux 서버 수에는 제한이 없지만 각각 다른 소켓 경로 이름을 사용해야합니다. 그만큼-L
및 -S
TMUX의 옵션은에서 소켓 이름 (지정하는 데 사용할 수 있습니다 $TMPDIR/tmux-$UID
.라는 이름의 소켓에 새 서버)에 대한 이야기로, 또는 전체 소켓 경로 이름을 정도 (또는 시작 temp
, 당신이 사용하는 것입니다 :
tmux -L temp …
사용하지 않도록 .tmux.conf
당신을 사용 , 당신 -f
은 그것을 읽도록 지시합니다 /dev/null
(항상 비어있는 특수 파일).
tmux -f /dev/null -L temp …
참고 : 이러한 /etc/tmux.conf
파일이 존재하는 경우 이를 처리 할 수 없습니다 . 이 “시스템 구성 파일”에 대한 경로는 하드 코드되어 있으며이를 우회 할 수있는 옵션이 없습니다 (코드 패치가 부족함).
일반적으로 new-session
실제로 서버를 시작 명령 하지만 세션을 원하지 않고 초기화 된 서버 만 쿼리하기를 원합니다. start-server
명령은 다음을 수행합니다. 세션을 작성하지 않고 서버를 시작합니다.
tmux -f /dev/null -L temp start-server …
이제 “query”명령 만 추가하면됩니다 (list-keys
이 경우).
tmux -f /dev/null -L temp start-server \; list-keys
참고 : 세미콜론은 tmux 명령 구분 자가 되기 때문에 쉘이 쉘 명령 구분자로 취급하지 못하도록 이스케이프 또는 따옴표로 묶어야합니다 .
유지 보수 할 세션이 없으므로 서버는 list-keys
명령 실행이 완료되면 자동으로 종료됩니다 .
따라서 다음과 같은 명령을 사용하면 .tmux.reset.conf
일시적으로.tmux.conf
파일을 (기본 바인딩 만 표시하도록) 기존 서버를 종료하지 않고도 파일 할 수 있습니다.
run-shell
명령이 동기식 인 경우 source-file
정적 파일 () 대신 구성 파일 (이후 처리 할 임시 파일로 캡처)에 이와 같은 호출을 포함 할 수 있습니다 .tmux.reset.conf
. 이렇게하면 항상 현재 버전의 tmux (기본 바인딩은 때때로 변경됨)의 기본 바인딩을 사용할 수 있습니다. 아아, run-shell
명령 의 완료 는 현재 후속 명령과 관련하여 비동기 적입니다 (명령 다음에 오는 run-shell
명령은 일반적으로 생성 된 프로세스 run-shell
가 완료 되기 전에 실행됩니다 ).
답변
다음 .tmux.reset.conf
은 기본 키 바인딩에서 자동으로 생성 되는 bash 스크립트에 다른 모든 답변을 롤업 한 것입니다 .
#!/bin/bash
tmux -f /dev/null -L temp start-server \; list-keys | \
sed -r \
-e "s/bind-key(\s+)([\"#~\$])(\s+)/bind-key\1\'\2\'\3/g" \
-e "s/bind-key(\s+)([\'])(\s+)/bind-key\1\"\2\"\3/g" \
-e "s/bind-key(\s+)([;])(\s+)/bind-key\1\\\\\2\3/g" \
-e "s/command-prompt -I #([SW])/command-prompt -I \"#\1\"/g" \
> ~/.tmux.reset.conf
임베디드 sed
명령 행은에서 출력의 다양한 부분을 이스케이프 처리 list-keys
합니다. 시스템의 특성에 따라 약간의 조정이 필요할 수 있습니다.
당신의에서 .tmux.conf
자신의 키 바인딩을 정의하기 전에 모든 키와 소스이 파일을 간단하게 바인딩을 해제 파일 :
unbind-key -a
source-file ~/.tmux.reset.conf
답변
상황을 잘 설명하는 다른 답변도 여기를 참조하십시오. 여기에 tmux 1.8 호환 tmux.reset.conf가 tmux -f /dev/null -L temp start-server \; list-keys
있습니다. 출력 을 복사 한 후 몇 가지 수정해야했습니다 . 특히 몇 가지 사항을 인용해야했습니다.
# First remove *all* keybindings
unbind-key -a
# Now reinsert all the regular tmux keys
bind-key C-b send-prefix
bind-key C-o rotate-window
bind-key C-z suspend-client
bind-key Space next-layout
bind-key ! break-pane
bind-key '"' split-window
bind-key '#' list-buffers
bind-key '$' command-prompt -I "#S" "rename-session '%%'"
bind-key % split-window -h
bind-key & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key "'" command-prompt -p index "select-window -t ':%%'"
bind-key ( switch-client -p
bind-key ) switch-client -n
bind-key , command-prompt -I "#W" "rename-window '%%'"
bind-key - delete-buffer
bind-key . command-prompt "move-window -t '%%'"
bind-key 0 select-window -t :0
bind-key 1 select-window -t :1
bind-key 2 select-window -t :2
bind-key 3 select-window -t :3
bind-key 4 select-window -t :4
bind-key 5 select-window -t :5
bind-key 6 select-window -t :6
bind-key 7 select-window -t :7
bind-key 8 select-window -t :8
bind-key 9 select-window -t :9
bind-key : command-prompt
bind-key \; last-pane
bind-key = choose-buffer
bind-key ? list-keys
bind-key D choose-client
bind-key L switch-client -l
bind-key [ copy-mode
bind-key ] paste-buffer
bind-key c new-window
bind-key d detach-client
bind-key f command-prompt "find-window '%%'"
bind-key i display-message
bind-key l last-window
bind-key n next-window
bind-key o select-pane -t :.+
bind-key p previous-window
bind-key q display-panes
bind-key r refresh-client
bind-key s choose-tree
bind-key t clock-mode
bind-key w choose-window
bind-key x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key z resize-pane -Z
bind-key { swap-pane -U
bind-key } swap-pane -D
bind-key '~' show-messages
bind-key PPage copy-mode -u
bind-key -r Up select-pane -U
bind-key -r Down select-pane -D
bind-key -r Left select-pane -L
bind-key -r Right select-pane -R
bind-key M-1 select-layout even-horizontal
bind-key M-2 select-layout even-vertical
bind-key M-3 select-layout main-horizontal
bind-key M-4 select-layout main-vertical
bind-key M-5 select-layout tiled
bind-key M-n next-window -a
bind-key M-o rotate-window -D
bind-key M-p previous-window -a
bind-key -r M-Up resize-pane -U 5
bind-key -r M-Down resize-pane -D 5
bind-key -r M-Left resize-pane -L 5
bind-key -r M-Right resize-pane -R 5
bind-key -r C-Up resize-pane -U
bind-key -r C-Down resize-pane -D
bind-key -r C-Left resize-pane -L
bind-key -r C-Right resize-pane -R
답변
내가 물었다 상류 그들은 그것을 (누군가을 제출하지 않는 한 홍보를) 해결하려하지 보인다.
다음 tmux list-keys
은 새로운 서버 인스턴스를 통해 얻은 수동으로 탈출 한 것 입니다.
tmux -f /dev/null -L temp start-server \; list-keys
(이전 답변 덕분에)
## See https://github.com/tmux/tmux/issues/729: How to reset key bindings to default? #729
bind-key -T prefix C-b send-prefix
bind-key -T prefix C-o rotate-window
bind-key -T prefix C-z suspend-client
bind-key -T prefix Space next-layout
bind-key -T prefix ! break-pane
bind-key -T prefix '"' split-window
bind-key -T prefix '#' list-buffers
bind-key -T prefix '$' command-prompt -I '#'S "rename-session '%%'"
bind-key -T prefix % split-window -h
bind-key -T prefix & confirm-before -p "kill-window #W? (y/n)" kill-window
bind-key -T prefix "'" command-prompt -p index "select-window -t ':%%'"
bind-key -T prefix ( switch-client -p
bind-key -T prefix ) switch-client -n
bind-key -T prefix , command-prompt -I '#W' "rename-window '%%'"
bind-key -T prefix - delete-buffer
bind-key -T prefix . command-prompt "move-window -t '%%'"
bind-key -T prefix 0 select-window -t :=0
bind-key -T prefix 1 select-window -t :=1
bind-key -T prefix 2 select-window -t :=2
bind-key -T prefix 3 select-window -t :=3
bind-key -T prefix 4 select-window -t :=4
bind-key -T prefix 5 select-window -t :=5
bind-key -T prefix 6 select-window -t :=6
bind-key -T prefix 7 select-window -t :=7
bind-key -T prefix 8 select-window -t :=8
bind-key -T prefix 9 select-window -t :=9
bind-key -T prefix ':' command-prompt
bind-key -T prefix \; last-pane
bind-key -T prefix = choose-buffer
bind-key -T prefix ? list-keys
bind-key -T prefix D choose-client
bind-key -T prefix L switch-client -l
bind-key -T prefix M select-pane -M
bind-key -T prefix [ copy-mode
bind-key -T prefix ] paste-buffer
bind-key -T prefix c new-window
bind-key -T prefix d detach-client
bind-key -T prefix f command-prompt "find-window '%%'"
bind-key -T prefix i display-message
bind-key -T prefix l last-window
bind-key -T prefix m select-pane -m
bind-key -T prefix n next-window
bind-key -T prefix o select-pane -t :.+
bind-key -T prefix p previous-window
bind-key -T prefix q display-panes
bind-key -T prefix r refresh-client
bind-key -T prefix s choose-tree
bind-key -T prefix t clock-mode
bind-key -T prefix w choose-window
bind-key -T prefix x confirm-before -p "kill-pane #P? (y/n)" kill-pane
bind-key -T prefix z resize-pane -Z
bind-key -T prefix { swap-pane -U
bind-key -T prefix } swap-pane -D
bind-key -T prefix '~' show-messages
bind-key -T prefix PPage copy-mode -u
bind-key -r -T prefix Up select-pane -U
bind-key -r -T prefix Down select-pane -D
bind-key -r -T prefix Left select-pane -L
bind-key -r -T prefix Right select-pane -R
bind-key -T prefix M-1 select-layout even-horizontal
bind-key -T prefix M-2 select-layout even-vertical
bind-key -T prefix M-3 select-layout main-horizontal
bind-key -T prefix M-4 select-layout main-vertical
bind-key -T prefix M-5 select-layout tiled
bind-key -T prefix M-n next-window -a
bind-key -T prefix M-o rotate-window -D
bind-key -T prefix M-p previous-window -a
bind-key -r -T prefix M-Up resize-pane -U 5
bind-key -r -T prefix M-Down resize-pane -D 5
bind-key -r -T prefix M-Left resize-pane -L 5
bind-key -r -T prefix M-Right resize-pane -R 5
bind-key -r -T prefix C-Up resize-pane -U
bind-key -r -T prefix C-Down resize-pane -D
bind-key -r -T prefix C-Left resize-pane -L
bind-key -r -T prefix C-Right resize-pane -R
bind-key -T root MouseDown1Pane select-pane -t = \; send-keys -M
bind-key -T root MouseDown1Status select-window -t =
bind-key -T root MouseDown3Pane if-shell -F -t = '#{mouse_any_flag}' "select-pane -t=; send-keys -M" "select-pane -mt="
# Someone also was wondering how to fix here: http://tmux-users.narkive.com/dTFVvLMh/is-it-possible-to-have-a-binding-that-brings-back-mouse-behavior
bind-key -T root MouseDrag1Pane if-shell -F -t = '#{mouse_any_flag}' "if -Ft= '#{pane_in_mode}' 'copy-mode -M' 'send-keys -M' " "copy-mode -M"
bind-key -T root MouseDrag1Border resize-pane -M
bind-key -T root WheelUpPane if-shell -F -t = '#{mouse_any_flag}' "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -et=' "
bind-key -T root WheelUpStatus previous-window
bind-key -T root WheelDownStatus next-window
위의 내용 은 github에 있으므로 수행 할 수 있습니다.
curl -L https://raw.githubusercontent.com/timotheecour/dinocode/master/tmux_list_keys_escaped.txt > ~/.tmux.reset.conf
unbind-key -a
source-file ~/.tmux.reset.conf
참고 : 어떻게 든 Richard Cook의 답변으로 여전히 탈출 문제가 발생했습니다.
답변
다음 은 tmux 2.1에서 이스케이프 문제를 해결하기위한 Richard Cook의 답변 을 수정 한 것입니다.
#!/bin/bash
tmux -f /dev/null -L temp start-server \; list-keys | \
sed -r \
-e "s/(bind-key.*\s+)([\"#~\$])(\s+)/\1\'\2\'\3/g" \
-e "s/(bind-key.*\s+)([\'])(\s+)/\1\"\2\"\3/g" \
-e "s/(bind-key.*\s+)([;])(\s+)/\1\\\\\2\3/g" \
-e "s/(command-prompt -I )#([SW])/\1\"#\2\"/g" \
-e "s/(if-shell -F -t = )#([^ ]+)/\1\"#\2\"/g" \
> ~/.tmux.reset.conf
시작 부분에 다음 줄 추가 .tmux.conf
unbind-key -a
source-file ~/.tmux.reset.conf