select-pane 명령이 원래 트리거된 방향에 창이 남아 있지 않은 경우 tmux 창의 반대편에 있는 창이 선택되도록 하는 동작을 비활성화할 수 있습니까?
그렇지 않은 경우 특정 방향에 다른 창이 있는지 확인하는 방법이 있습니까?
tmux 창에 (v)분할 활성 창이 없고 select-pane 명령이 트리거되면 오류 메시지가 표시됩니다. 이는 예상된 동작입니다.
당신의 답변에 감사드립니다
답변1
다음 항목에 추가하세요 ~/.tmux.conf
.
set-option -g default-shell /bin/bash
unbind Up
unbind Down
unbind Right
unbind Left
bind Up run-shell "if [ $(tmux display-message -p '#{pane_at_top}') -ne 1 ]; then tmux select-pane -U; fi"
bind Down run-shell "if [ $(tmux display-message -p '#{pane_at_bottom}') -ne 1 ] ; then tmux select-pane -D; fi"
bind Right run-shell "if [ $(tmux display-message -p '#{pane_at_right}') -ne 1 ]; then tmux select-pane -R; fi"
bind Left run-shell "if [ $(tmux display-message -p '#{pane_at_left}') -ne 1 ]; then tmux select-pane -L; fi"
기본적으로 이것은 tmux 버전 2.6+에서 작동해야 합니다(그 후 그들은 panel_at_top, panel_at_bottom, panel_at_left, panel_at_right 환경 변수를 추가했습니다. tmux < v2.6의 경우 구현 방법을 완전히 모르겠습니다.
또한 사용자 정의 셸을 시작하려면 set-option -g default-command fish
(또는 zsh나 csh 등)을 통해 수행하세요. 대안으로 bash가 아닌 쉘을 tmux 기본 쉘로 사용하려면 ( set-option -g default-shell
)로 설정한 후 원하는 쉘 스크립트에 위 로직을 작성하면 됩니다. 그러나 (내 경우와 마찬가지로) 일부 쉘을 사용하면 명령 경우 단일 라인의 편리함을 제공하지 않습니다(또는 일부 쉘에 대해 충분히 알지 못하거나 여러 라인이 즉시 작동할 수도 있음) 쉘.
답변2
질문을 게시해 주신 Gilgamesh Skytrooper에게 감사드립니다.깃허브. 이는 여러 세션을 처리할 수 있고 셸 하위 프로세스를 호출하지 않는 간단한 버전입니다.
bind -n M-a if -F '#{pane_at_left}' '' 'select-pane -L'
bind -n M-d if -F '#{pane_at_right}' '' 'select-pane -R'
bind -n M-w if -F '#{pane_at_top}' '' 'select-pane -U'
bind -n M-s if -F '#{pane_at_bottom}' '' 'select-pane -D'
-n
접두어 ( )를 먼저 누르려면 이를 제거한 다음 원하는 대로 C-b
바인딩을 변경하십시오 .M-[awds]