it-swarm.com.de

Wie man tmux-Fenster automatisch in das aktuelle Verzeichnis umbenennt

Ich möchte, dass tmux das Fenster automatisch mit dem aktuellen Arbeitsverzeichnis (cwd) umbenennt. Standardmäßig wird der Name des Registers/Fensters als Name des aktuellen Prozesses angegeben, z. B. zsh oder vim.

Wenn ich in tmux ein neues Fenster öffne, lautet der Name reattach-to-use-namespace und wechselt dann sofort zu zsh.

tmux tabs

Ich bin auf OS X 10.10.2, ich verwende Zshell und ich habe Tmux 1.9a.

Um klar zu sein, ich möchte nicht den gesamten Pfad im Namen des Fensters, nur das aktuelle Verzeichnis, also möchte ich projectName, nicht /Users/username/Development/projectName.

Wenn Sie meinen aktuellen tmux.conf sehen wollen, ist hier ist .

32
aharris88

Um das zu erweitern, was Josef geschrieben hat, können Sie den Basisnamen des Verzeichnisses mithilfe eines Shell-Snippets in den Status setzen:

# be sure to see note* below
set -g window-status-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'
set -g window-status-current-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'

# status bar updates every 15s by default**, change to 1s here 
# (this step is optional - a lower latency might have negative battery/cpu usage impacts)
set -g status-interval 1

* Beachten Sie, dass was ${pwd##*/} nach ${pwd####*/} umschrieben wird, da # in der Formatzeichenfolge eine besondere Bedeutung hat.

** Siehe hier für ein Beispiel für eine Standardkonfiguration von Tmux.

20
CEL

Bei tmux 2.3+ zeigt der Formatmodifizierer b: den "Basisnamen" (oder "Endpunkt") eines Pfads.

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#{b:pane_current_path}'

Der Abschnitt FORMATS von man tmux beschreibt andere Modifikatoren wie #{d:} und sogar #{s/foo/bar/:}.


Bei tmux 2.2 oder älter kann stattdessen der Befehl basename Shell verwendet werden.

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#(basename "#{pane_current_path}")'
12
Justin M. Keyes

Zeige die Top N Komponenten

 enter image description here

Die Anzeige nur des Basisnamens erzeugt zu viel Zweideutigkeit, aber vollständige Pfade sind zu viel Durcheinander, daher entschied ich mich für:

the/last/path

anstatt:

/a/very/long/the/last/path

oder nur:

path

.tmux.conf:

set-window-option -g window-status-current-format '#[fg=white,bold]** #{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]**|'
set-window-option -g window-status-format '#[fg=white,bold]#{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]|'

Trick aus: Unix Teil des Pfads entfernen

Wenn das die Mehrdeutigkeit immer noch nicht löst, gehe ich für:

bind-key -r w choose-window -F '#{window_index} | #{pane_current_command} | #{Host} | #{pane_current_path}'

Getestet auf Tmux 2.1, Ubuntu 16.04.

Ich verwende das folgende in ~/.tmux.conf, um dies zu erreichen (funktioniert unter OSX, zsh, tmux-2.3):

set -g automatic-rename-format '#{pane_current_path}'
set -g status-interval 5

Sie können das Statusintervall auf 1 setzen, um schneller auf veränderte Verzeichnisse reagieren zu können.

Laut dem Änderungsprotokoll ( https://raw.githubusercontent.com/tmux/tmux/master/CHANGES ) sollte dies in tmux 1.9 und höher funktionieren.

Bei Verwendung von ssh in eine CentOS-Maschine mit tmux 2.3 ändert sich der Fenstername nicht, bis ich im neuen Bedienfeld die Eingabetaste drücke. Ich weiß nicht, warum das so ist.

2
Harry Mallon

Führen Sie in einer tmux-Sitzung für zsh Shell Folgendes aus:

setopt Prompt_SUBST
export PS1=$'\ek$(basename $(pwd))\e\\> '

Wenn jemand bash Shell verwendet:

export PS1="\033k\$(basename \$(pwd))\033\\> "

Sie können diese Befehle in der Shell-Initialisierungsdatei unter der Bedingung hinzufügen, dass die Variable $TERM env auf den Wert "screen" gesetzt ist.

1

Ich verwende dafür zsh hook

Folgendes hinzufügen in ~/.zshrc

precmd () {
  if [ -n "$TMUX" ]; then
    tmux set-window-option -q window-status-format "#[fg=cyan bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
    tmux set-window-option -q window-status-current-format "#[fg=cyan, bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
  fi
}
1
logcat

Das Hinzufügen dieser Konfiguration zu Ihrer Datei ~/.tmux.conf sollte funktionieren:

set-option -g window-status-current-format '#I:#{pane_current_path}#F'
set-option -g window-status-format '#I:#{pane_current_path}#F'
set-option -g status-interval 1

Das hängt jedoch von Ihrer Tmux-Version ab. Ich konnte es nicht mit 1.9a3 (in Cygwin) zum Laufen bringen - aber mit Tmux 1.8 auf Ubuntu (in Vagrant) hat es gut funktioniert.

1
Josef

Ich bin mir sicher, dass Sie Folgendes verwenden wollen:

set -g status-left '#{pane_current_path} '

 enter image description here

0
jibancanyang

Dies beantwortet Ihre Frage nicht streng - es benennt eine vorhandene tmux-Sitzung nicht automatisch in das aktuelle Arbeitsverzeichnis um.

Beim Erstellen einer neuen Sitzung wird diese Sitzung vielmehr nach dem aktuellen Arbeitsverzeichnis benannt.

Folgendes habe ich getan:

zu

~/.aliases

hinzufügen

alias tm='tmux new -s `basename $PWD`'

Öffnen Sie ein neues Terminalfenster und geben Sie Folgendes ein:

tm

Dadurch wird nun eine neue tmux-Sitzung erstellt, die nach dem aktuellen Arbeitsverzeichnis benannt ist.

Hinweis: Dies basiert auf basename, das in Windows nicht vorhanden ist.

0
FreePender

Um zu ändern, was Sie in der Fensterliste sehen, können Sie ein Format angeben, wenn Sie die Schlüsselbindung für die chose-window-Funktion wie folgt definieren:

bind-key '"'  choose-window  -F "#{session_name} | #{window_name} - #{b:pane_current_path} (#{pane_current_command})"
0
Rho Phi