Tmux vergisst das Verzeichnis, in dem die Sitzung erstellt wurde

8

Wenn ich in tmux mehrere Sitzungen erstelle, wird das aktuelle Verzeichnis für jedes neue Fenster in nachfolgenden Sitzungen als aktuelles Verzeichnis für die erste festgelegt.

Zum Beispiel:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

Wie kann ich tmux zwingen, das aktuelle Verzeichnis für jedes neue Fenster in nachfolgenden Sitzungen als das Verzeichnis festzulegen, in dem die Sitzung erstellt wurde?

tmux 1.6

zsh 4.3

Shamaoke
quelle

Antworten:

21

Ab tmux 1.9 wurde die Option Standardpfad entfernt .

Sie können Folgendes verwenden, um in dem Verzeichnis zu öffnen, in dem die Sitzung geöffnet wurde (der 'Client' im Namen würde mir anzeigen, dass es sich um den aktuellen tmux-Lauf in Ihrer Shell handelt, aber er scheint die Pfade zu wechseln, wenn zwischen Sitzungen in der Sitzung gewechselt wird gleicher Kunde):

bind-key c  new-window -c "#{client_cwd}"

Andernfalls kopieren Sie den Pfad des aktuellen Bereichs:

bind-key c  new-window -c "#{pane_current_path}"

Es gibt auch pane_start_path, der einige Workflows ansprechen könnte.

bind-key c  new-window -c "#{pane_start_path}"

Für die geteilten Fensterbefehle.

bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"
David C. Bishop
quelle
1
DAS ist die richtige Antwort. Speziell die 2. Option in meinem Fall.
Mike Rapadas
Vergessen Sie nicht, alle aktuell funktionierenden tmux-Terminals einschließlich des Hintergrunds zu schließen, bevor Sie Ihre Konfigurationsdatei ändern. Andernfalls lädt tmux keine neuen Konfigurationen.
Zufälligkeit2077
@lightmanhk Sie sollten in der Lage sein, nur: Quelle ~ / .tmux.conf
David C. Bishop
1
Gibt es eine Möglichkeit, dies für Fensteraufteilungen zu verallgemeinern? split-window -h "#{pane_current_path}"wird nicht funktionieren ...
Bach
1
@ Bach Versuchen Sie es mit einem -c. split-window -h -c "#{pane_current_path}"
David C. Bishop
3

Mir ist klar, dass diese Frage ziemlich alt ist, aber sie war eine der wenigen Fragen bei StackExchange, als ich selbst nach der Antwort gesucht habe. Hier ist, wie ich sie für tmux 1.8 gelöst habe.

Der new-windowBefehl nimmt ein -cFlag, mit dem Sie das aktuelle Verzeichnis des neuen Fensters angeben können. Standardmäßig ist es eine leere Zeichenfolge, die das aktuelle Arbeitsverzeichnis der Fenster als Verzeichnis für das neue Fenster verwendet. Wenn Sie a -als Wert für das -cFlag übergeben, wird das Verzeichnis des neuen Fensters auf das festgelegt, in dem die Sitzung geöffnet wurde.

Hier ist ein Auszug aus den Dokumenten:

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

Wenn Sie das Standardverhalten der <PREFIX> cTastenkombination ändern möchten, um dies widerzuspiegeln, habe ich Folgendes in meinem ~/.tmux.conf:

bind-key c   new-window -c -
Nicklamuro
quelle
0

Hier gibt es einige Antworten: /unix/12032/create-new-window-with-current-directory-in-tmux

Zusammenfassend:

Aus den tmux-FAQ geht hervor, dass ein stumpfer (aber sehr allgemeiner und ziemlich Shell-unabhängiger) Weg:

  • Wie kann ich ein neues Fenster im selben Verzeichnis wie das aktuelle Fenster öffnen?

Eine Möglichkeit besteht darin, einfach "TMUX = tmux" im Fenster auszuführen. Dies funktioniert jedoch nur, wenn kein Befehl ausgeführt wird, sodass Sie den Befehl eingeben können.

Eine Problemumgehung besteht darin, tmux über den aktuellen Pfad durch eine Umgebungsvariable zu informieren. Verwenden Sie dazu den folgenden Befehl:

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

Dadurch wird TMUXPWD_i (wobei i die Nummer des aktuellen Fensters ist) auf den Pfad des aktuellen Verzeichnisses gesetzt. Dieser Befehl kann zu PS1 hinzugefügt werden, zum Beispiel:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

Wenn ein neues Fenster erstellt wird, sollte die Shell aufgefordert werden, das Verzeichnis zu wechseln. Sie können eine neue Bindung definieren (z. B. wenn Sie GNU bash verwenden):

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

Diese Lösung funktioniert auch dann, wenn derzeit ein Befehl im Terminal ausgeführt wird. Sie funktioniert jedoch nicht in einem Fenster, das gerade gegen ein anderes ausgetauscht wurde, da TMUXPWD_i nach einem Austausch nicht aktualisiert wird. Sobald jedoch eine neue Eingabeaufforderung angezeigt wird, wird TMUXPWD_i ordnungsgemäß aktualisiert.

Ersetzen Sie einfach die für Sie geeigneten Aufrufe der Shell.

Auch anscheinend neuere Versionen von tmux haben dies mit einem Befehl behoben

tmux new-window

ältere Versionen sollen so funktionieren:

Berufung

tmux neww

von Ihrer Shell wird tmux in diesem Verzeichnis öffnen.

Wenn Sie neue Fenster oder Fenster aus dem aktuellen Arbeitsverzeichnis in tmux öffnen möchten, sollten Sie stattdessen:

tmux set-option Standardpfad "$ PWD"

Walross
quelle
Danke, dass du versucht hast zu helfen, Walross . Ich habe diese Frage auf unix.stackexchange gesehen und FAQ gelesen. Dies sind jedoch nicht die Antworten auf meine Frage.
Shamaoke
1
Wenn Sie eine neue Sitzung erstellen, ist das aktuelle Verzeichnis für jedes neue Fenster oder Fenster, das Sie in dieser Sitzung öffnen, das Verzeichnis, in dem Sie die Sitzung starten . Dies gilt, wenn ich eine einzelne Sitzung erstelle. Wenn ich jedoch ein neues Terminalfenster öffne und eine weitere Sitzung darin starte, ist das aktuelle Arbeitsverzeichnis für jedes neue Fenster das Verzeichnis, in dem ich die erste Sitzung starte, jedoch nicht die aktuelle. Dies ist anscheinend ein Fehler in tmux 1.6, da der Fehler beim Herunterstufen auf Version 1.3 nicht aufgetreten ist.
Shamaoke