Ich habe diese Einstellung:
# Number windows and panes starting at 1 so that we can jump to
# them easier.
set -g base-index 1
set -g pane-base-index 1
Das Gleiche hätte ich aber auch gerne für den Wechsel zwischen Tmux-Sitzungen. Wenn ich die Tmux-Sitzungsliste öffne, beginnt sie immer noch bei 0. Ist es möglich, die Sitzungszählung nicht bei 0, sondern bei 1 zu starten?
Antwort1
Das ist nicht möglich und wird auch in Zukunft nicht möglich sein. Es gibtabgelehnte Funktionsanforderungdenn session-base-index
, Entwickler glauben, dass "Es ist einfach keine hilfreiche Funktion."
Antwort2
Sie scheinen sich auf dieSitzungsgruppenindex, das generiert wird und nicht dazu verwendet wird, anzugeben, tmux
an welcher Sitzung Sie eine Verbindung herstellen möchten.
Es wird verwendet in derVorlage fürlist-sessions
:
"#{?session_grouped, (group ,}" \
und generiert insession.c
(und beginnt immer bei Null):
/* 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");
}
Dieser Wert wird jedoch nur in der formatierten Ausgabe verwendet.
Antwort3
tl;dr
Fahren Sie mit dem Abschnitt „Lösung“ fort.
Analyse
Es gibt einen großenMissverständnisHier.
Ihr Screenshot wurde wahrscheinlich nach erstellt prefixs, wodurch standardmäßig der folgende tmux-Befehl ausgeführt wird:
choose-tree -Zs
(in einer Shell können Sie es mit ausführen tmux choose-tree -Zs
). Die Zahlen in Klammern habenNichtsmit Sitzungs-IDs oder Sitzungsnamen zu tun. Es sind nur „Zeilennummern“in der Liste im MomentDie Liste könnte beispielsweise folgendermaßen aussehen:
(0) + foo: 2 windows (attached)
(1) + bar: 1 windows
Aber nach dem Erweitern aller Elemente kann es folgendermaßen aussehen:
(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*
Diese „Zeilennummern“ sind also keine geraden Zahlen, sondern Schlüssel, die Sie verwenden können. Beachten Sie, dass in der obigen Liste nur 0
und M-c
( Alt+ c) Sitzungen entsprechen.Die Art und Weise, wie tmux Sitzungen zählt, hat nichts mit diesen Schlüsseln zu tun.angefordert (und abgelehnt)session-base-index
würde Ihr Problem nicht lösen.Eine Aufforderung zum ZählenLinien inchoose-tree
ab 1 würde viel mehr Sinn machen.
Sie können Ihre eigenen Schlüssel definieren, indem Sie -K
angebenchoose-tree
Beispielsweise wird die Umstellung auf einen armen Mann folgendermaßen umgesetzt:
choose-tree -ZsK '#{e|+:1,#{line}}'
Das Ergebnis ist:
(1) + foo: 2 windows (attached)
(2) + bar: 1 windows
Allerdings können dadurch nur bis zu neun Zeilen mit Schlüsseln versehen werden. Mein Beispiel sieht nach der Erweiterung so aus:
(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*
Wo keine usw. vorhanden sind M-a
.M-b
ImCodeIch habe Folgendes gefunden:
#define WINDOW_TREE_DEFAULT_KEY_FORMAT \ "#{?#{e|<:#{line},10}," \ "#{line}" \ "," \ "#{?#{e|<:#{line},36}," \ "M-#{a:#{e|+:97,#{e|-:#{line},10}}}" \ "," \ "" \ "}" \ "}"
Daraus schließe ich, dass der Standardwert für choose-tree -K
ist:
#{?#{e|<:#{line},10},#{line},#{?#{e|<:#{line},36},M-#{a:#{e|+:97,#{e|-:#{line},10}}},}}
Sie können direkt um eins verschieben, indem Sie jedes #{line}
durch ersetzen #{e|+:1,#{line}}
; oder Sie können die Anzahl der Berechnungen verringern, indem Sie die fest codierten Konstanten gegebenenfalls ändern:
#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}
Lösung
Der tmux-Befehl lautet:
choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'
Sie können es in einer Shell innerhalb von tmux testen, indem Sie aufrufen tmux choose-tree …
. Wenn das Ergebnis Ihren Wünschen entspricht, binden Sie den Befehl an , prefixsindem Sie die folgende Zeile zu Ihrem hinzufügen .tmux.conf
:
bind-key s choose-tree -ZsK '#{?#{e|<:#{line},9},#{e|+:1,#{line}},#{?#{e|<:#{line},35},M-#{a:#{e|+:97,#{e|-:#{line},9}}},}}'
Beachten Sie, dass die Datei beim Start eines tmux-Servers analysiert wird. Um Ihren bereits laufenden Server zu beeinflussen, müssen Sie den Befehl an tmux weitergeben (z. B. tmux bind-key s …
in einer Shell innerhalb von tmux) oder die geänderte Datei neu laden ( prefix:source-file ~/.tmux.conf
Enter).
Beispielergebnis
(1) + foo: 2 windows (attached)
(2) + bar: 1 windows
Und nach dem Erweitern:
(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*
Antwort4
Wie bereits gesagt, wird dies nicht nativ unterstützt.
Die einfachste Lösung ist das automatische Erstellen dummy
einer Sitzung.
.tmux.conf
Fügen Sie Ihrer Datei einfach diese Zeile hinzu :
# Start a dummy session to make real sessions start from 1
new-session -d -s dummy
Wenn Sie tmux dann starten, wird im Hintergrund eine Sitzung mit dem Namen „dummy“ erstellt. Ihre erste manuell erstellte Sitzung erhält dann die Nummer 1.
dummy
Sie können den Namen in einen beliebigen anderen Namen ändern .