tmux '마지막 창 마커'를 사용자 정의하는 방법은 무엇입니까?

tmux '마지막 창 마커'를 사용자 정의하는 방법은 무엇입니까?

기본적으로 Tmux는 -창 제목 뒤에 마지막으로 방문한 창을 표시합니다. 이 마커를 사용자 정의하고 사용자 정의 기호로 설정하는 방법이 있습니까? 감사해요,

답변1

man 1 tmux말한다:

기본적으로 창 목록에는 현재 세션에 있는 창의 인덱스, 이름 및 플래그(있는 경우)가 숫자 오름차순으로 표시됩니다. window-status-format및 옵션을 사용하여 사용자 정의할 수 있습니다 window-status-current-format. 플래그는 창 이름에 추가되는 다음 기호 중 하나입니다.

Symbol    Meaning
*         Denotes the current window.
-         Marks the last window (previously selected).
#         Window is monitored and activity has been detected.
!         A bell has occurred in the window.
~         The window has been silent for the monitor-silence interval.
M         The window contains the marked pane.
Z         The window's active pane is zoomed.

에 대한 set-window-option window-status-format:

window-status-format string
상태 표시줄 창 목록에 창이 표시되는 형식을 설정합니다. [...] 기본값은 입니다 #I:#W#F.

그런 다음 "창 플래그"를 의미하는 것을 FORMATS배우십시오 #F. 나는 플래그와 관련된 기호를 직접 변경하는 기능의 흔적을 찾지 못했습니다. 그래도 이것을 사용할 수 있습니다:

또한 셸 명령 출력의 첫 번째 줄은 를 사용하여 삽입할 수 있습니다 #().

이는 다른 것을 사용 tr하거나 sed변경할 수 있음을 의미합니다 . -당신은 다음과 같은 사실에 놀랄 수도 있습니다:

형식을 구성할 때 명령이 완료될 때 tmux까지 기다리지 않습니다 . #()대신 동일한 명령을 실행한 이전 결과가 사용되거나 명령이 이전에 실행되지 않은 경우 자리 표시자가 사용됩니다.

여전히 내 테스트에서는 간단한 교체가 즉시 작동하거나 tr즉시 sed작동하는 것처럼 보이므로 걱정할 것이 없습니다. 내부에서 tmux다음을 실행하세요.

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"

아니면 이거:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/</')"

tr보다 간단하고 작기 때문에 권장합니다 sed. (중요하다면) 더 나은 성능을 발휘할 것입니다. 그러나 -다중 문자 * 문자열 로 바꾸고 싶다면 이것이 sed바로 도구입니다. 예:

tmux set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | sed 's/-/<--/')"

노트:

  • %%대신 파서 %때문입니다 tmux.
  • tmux set-window-option window-status-format …( 없이 -g) 단일 창의 형식을 지정합니다. 이는 이 특정 창의 전역 형식보다 우선합니다.
  • window-status-current-format창이 현재 창일 때 사용되는 형식을 지정하는 것도 있습니다 . "마지막 창" 플래그는 분명히 현재 창에 적용되지 않지만 적용할 수 있는 플래그를 사용자 정의하려면 변경 window-status-current-format도 필요합니다.
  • 추가할 줄은 /etc/tmux.conf다음과 ~/.tmux.conf같습니다.

    set-window-option -g window-status-format "#I:#W#(printf '%%s\n' '#F' | tr '-' '<')"
    

* 또는 오히려 멀티바이트입니다. 비교하다이것.

답변2

이것이 언제 추가되었는지는 모르겠지만 tmux 형식으로 정규식 대체를 수행하면 이를 더 간단하게 수행할 수 있습니다. 맨페이지에서:

A prefix of the form ‘s/foo/bar/:’ will substitute ‘foo’ with ‘bar’ throughout.
The first argument may be an extended regular expression and a final argument may be ‘i’ to ignore case, for example:
 ‘s/a(.)/\1x/i:’ would change ‘abABab’ into ‘bxBxbx’.

따라서 사용 사례에 따라 window_flags다음과 같이 변수 내용에 대해 교체를 수행할 수 있습니다.

set-window-option -g window-status-format "  #{s/-/>>/:window_flags} #I #W"

관련 정보