답변1
불가능하고, 앞으로도 불가능할 것입니다. 가지다기능 요청 거부의 경우 session-base-index
개발자는 “이건 그냥 도움이 안되는 기능이군요".
답변2
를 언급하고 있는 것 같습니다.대화 그룹 색인, 이는 생성되며 tmux
연결할 세션을 알려주는 데 사용되지 않습니다.
그것은에서 사용됩니다템플릿은 다음과 같습니다list-sessions
:
"#{?session_grouped, (group ,}" \
그리고 생성된session.c
(그리고 항상 0부터 시작합니다):
/* Find session group index. */
u_int
session_group_index(struct session_group *sg)
{
struct session_group *sg2;
u_int i;
i = 0;
TAILQ_FOREACH(sg2, &session_groups, entry) {
if (sg == sg2)
return (i);
i++;
}
fatalx("session group not found");
}
그러나 이 값은 형식화된 출력에만 사용됩니다.
답변3
너무 길어요.
"솔루션" 섹션으로 건너뛰세요.
분석하다
큰이있다오해여기.
prefixs스크린샷은 기본적으로 다음 tmux 명령을 실행한 후에 촬영되었을 것입니다.
choose-tree -Zs
(쉘에서는 tmux choose-tree -Zs
. 괄호 안의 숫자는아무것도 없다세션 ID 또는 세션 이름과 관련됩니다. 그들은 단지 "줄 번호"일 뿐입니다.현재 목록에 있음. 예를 들어 목록은 다음과 같습니다.
(0) + foo: 2 windows (attached)
(1) + bar: 1 windows
그러나 모든 항목을 확장하면 다음과 같이 보일 수 있습니다.
(0) - foo: 2 windows (attached)
(1) ├─> - 0: [tmux]*Z
(2) │ ├─> 0: man
(3) │ ├─> 1: bash*
(4) │ └─> 2: bash
(5) └─> - 1: bash-
(6) ├─> 0: bash
(7) ├─> 2: bash
(8) ├─> 3: bash
(9) ├─> 4: bash
(M-a) ├─> 5: bash
(M-b) └─> 1: bash*
(M-c) - bar: 1 windows
(M-d) └─> 0: bash*
따라서 이러한 "줄 번호"는 짝수가 아니며 사용할 수 있는 키입니다. 위 목록의 0
합계 M-c
( Alt+ )만 c세션에 해당합니다.tmux가 세션을 평가하는 방식은 이러한 키와 무관하므로요청(및 거부)session-base-index
그것은 당신의 문제를 해결하지 못할 것입니다.요청 횟수이동 중choose-tree
1부터 시작하는 것이 더 합리적입니다.
-K
다음을 지정하여 자신만의 키를 정의할 수 있습니다.choose-tree
. 예를 들어, 가난한 사람의 교대근무는 다음과 같이 달성됩니다.
choose-tree -ZsK '#{e|+:1,#{line}}'
이는 다음을 제공합니다.
(1) + foo: 2 windows (attached)
(2) + bar: 1 windows
그러나 이렇게 하면 최대 9개 행에만 키가 추가됩니다. 내 예를 확장하면 다음과 같습니다.
(1) - foo: 2 windows (attached)
(2) ├─> - 0: [tmux]*Z
(3) │ ├─> 0: man
(4) │ ├─> 1: bash*
(5) │ └─> 2: bash
(6) └─> - 1: bash-
(7) ├─> 0: bash
(8) ├─> 2: bash
(9) ├─> 3: bash
├─> 4: bash
├─> 5: bash
└─> 1: bash*
- bar: 1 windows
└─> 0: bash*
아무도 없는 곳에서 기다리세요 M-a
.M-b
내부에암호나는 이것을 찾았다:
#define WINDOW_TREE_DEFAULT_KEY_FORMAT \ "#{?#{e|<:#{line},10}," \ "#{line}" \ "," \ "#{?#{e|<:#{line},36}," \ "M-#{a:#{e|+:97,#{e|-:#{line},10}}}" \ "," \ "" \ "}" \ "}"
그래서 제가 내린 결론은 choose-tree -K
이렇습니다.
#{?#{e|<:#{line},10},#{line},#{?#{e|<:#{line},36},M-#{a:#{e|+:97,#{e|-:#{line},10}}},}}
#{line}
각 비트를 ;로 바꾸면 #{e|+:1,#{line}}
한 비트씩 직접 이동할 수 있습니다. 또는 적절한 경우 하드코딩된 상수를 변경하여 계산 수를 줄일 수 있습니다.
#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}
해결책
tmux 명령은 다음과 같습니다:
choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'
tmux 내에서 쉘을 호출하여 이를 테스트할 수 있습니다 tmux choose-tree …
. 결과가 원하는 결과이면 prefixs다음 줄을 다음 줄에 추가하세요 .tmux.conf
.
bind-key s choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'
이 파일은 tmux 서버가 시작될 때 구문 분석된다는 점을 기억하세요. 이미 실행 중인 서버에 영향을 미치려면 명령을 tmux에 전달하거나(예: tmux bind-key s …
tmux 내의 셸에서) 변경된 파일( prefix:source-file ~/.tmux.conf
Enter)을 다시 로드해야 합니다.
결과의 예
(1) + foo: 2 windows (attached)
(2) + bar: 1 windows
확장 후:
(1) - foo: 2 windows (attached)
(2) ├─> - 0: [tmux]*Z
(3) │ ├─> 0: man
(4) │ ├─> 1: bash*
(5) │ └─> 2: bash
(6) └─> - 1: bash-
(7) ├─> 0: bash
(8) ├─> 2: bash
(9) ├─> 3: bash
(M-a) ├─> 4: bash
(M-b) ├─> 5: bash
(M-c) └─> 1: bash*
(M-d) - bar: 1 windows
(M-e) └─> 0: bash*
답변4
앞서 언급했듯이 이 기능은 기본적으로 지원되지 않습니다.
가장 간단한 해결책은 dummy
세션을 자동으로 생성하는 것입니다.
.tmux.conf
파일에 다음 줄을 추가 하면 됩니다 .
# Start a dummy session to make real sessions start from 1
new-session -d -s dummy
그런 다음 tmux를 시작하면 백그라운드에 "dummy"라는 세션이 생성됩니다. 수동으로 생성된 첫 번째 세션은 번호 1로 지정됩니다.
이름을 dummy
다른 이름으로 변경할 수 있습니다.