Es ist möglich, ein new-window
mit dem Arbeitsverzeichnis zu öffnen , in dem ich mich gerade befinde . Ich verwende zsh , wenn es darauf ankommt.
Es ist möglich, ein new-window
mit dem Arbeitsverzeichnis zu öffnen , in dem ich mich gerade befinde . Ich verwende zsh , wenn es darauf ankommt.
Antworten:
Ab tmux 1.9 die default-path
wurde Option entfernt, so dass Sie die verwenden müssen -c
Option mit new-window
, und split-window
(zB durch die rebinding c
, "
und %
Bindungen enthalten
-c '#{pane_current_path}'
). Weitere Informationen finden Sie in den anderen Antworten auf diese Frage.
Eine relevante Funktion landete Anfang Februar 2012 im tmux SVN-Trunk. In tmux- Builds, die diesen Code enthalten, wird durch das Aufrufen von tmux-Tastenzuordnungennew-window
ein neues Fenster mit demselben aktuellen Arbeitsverzeichnis wie die aktiven Prozesse des aktuellen Bereichs erstellt (solange die default-path
Sitzung aktiv ist) Option ist leer (Standardeinstellung). Gleiches gilt für den Bereich, der vom split-window
Befehl erstellt wird, wenn er über eine Bindung aufgerufen wird.
Dies verwendet speziellen plattformspezifischen Code, sodass derzeit nur bestimmte Betriebssysteme unterstützt werden: Darwin (OS X), FreeBSD, Linux, OpenBSD und Solaris.
Dies sollte in der nächsten Version von tmux (1.7?) Verfügbar sein .
Mit tmux 1.4 benutze ich normalerweise nur
tmux neww
in einer Shell, die bereits das gewünschte aktuelle Arbeitsverzeichnis hat.
Wenn ich jedoch damit rechne, viele Fenster mit demselben aktuellen Arbeitsverzeichnis erstellen zu müssen (oder sie mit der üblichen <Präfix> c
-Schlüsselbindung starten zu können ), setze ich die default-path
Sitzungsoption über
tmux set-option default-path "$PWD"
in einer Shell, die bereits das gewünschte aktuelle Arbeitsverzeichnis hat (obwohl Sie dies natürlich von jedem Verzeichnis aus tun und stattdessen nur den Wert angeben könnten).
Wenn default-path
ein nicht leerer Wert festgelegt ist, wird sein Wert verwendet, anstatt das aktuelle Arbeitsverzeichnis von Befehlszeilenaufrufen von zu "erben" tmux neww
.
Die tmux- FAQ enthält einen Eintrag mit dem Titel "Wie kann ich ein neues Fenster im selben Verzeichnis wie das aktuelle Fenster öffnen?", Der einen anderen Ansatz beschreibt. es ist allerdings ein bisschen verworren.
/proc/PID/cwd
unter Linux) möglich ist). Es gibt eine mögliche Teillösung in einem Eintrag der tmux- FAQ (die Shell zeichnet ihre cwd auf, wenn sie eine Eingabeaufforderung druckt, und bindet dann einen Schlüssel, der eine neue Shell im aufgezeichneten Verzeichnis startet).
default-path
Sitzungsoption (sofern festgelegt). Die tmux-FAQ enthält einen Eintrag, der eine Möglichkeit beschreibt, einen Schlüssel zu binden, der ein neues Fenster startet, wobei der Befehl der Shell im aktuellen Fenster ausgeführt wird („Wie kann ich ein neues Fenster im selben Verzeichnis wie das aktuelle Fenster öffnen?“). , aber die Methode ist ziemlich kompliziert. Das gleiche könnte wahrscheinlich für split-window
und new-session
(anstelle von neww
) gemacht werden.
Die aktuelle (1.9a) Tmux-Manpage enthält einen optionalen -c start-directory
Parameter für einige Befehle, einschließlich new-window
und split-window
. Es enthält auch die Formatvariable pane_current_path
, die sich auf die bezieht
Current path if available
.
Durch die Kombination dieser können wir ein neues Fenster mit dem aktuellen Arbeitsverzeichnis öffnen.
new-window -c "#{pane_current_path}"
Die Anführungszeichen werden benötigt, wenn der aktuelle Pfad Leerzeichen enthält.
Wenn Sie das aktuelle Fenster vertikal teilen möchten, verwenden Sie
split-window -c "#{pane_current_path}"
oder für eine horizontale Teilung
split-window -h -c "#{pane_current_path}"
Fügen Sie Folgendes zu Ihrem Arbeitsverzeichnis hinzu, damit die Tastenkombinationen standardmäßig neue Teilfenster und Fenster mit dem aktuellen Arbeitsverzeichnis öffnen .tmux.conf
. Das "
mit umgebenden Anführungszeichen soll Tmux mitteilen, dass es keine Zeichenfolge beginnen soll, sondern den "Schlüssel binden soll .
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
prefix
- :
, und geben Sie dannsource ~/.tmux.conf
tmux source-file .tmux.conf
.
Ja, benutze new-window -c "#{pane_current_path}"
. Sie können Folgendes zu Ihrer hinzufügen ~/.tmux.conf
, um sie dauerhaft zu machen (unter Annahme der Standard-Tastenkombinationen):
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
Die default-path
Pfadeinstellung wurde entfernt vom vorgelagerten Code und TMux Autor in dieser Nachricht unter Verwendung von entweder commit empfohlen -c "#{pane_current_path}"
oder -c "$PWD
in den new-window
und split-window
Befehlen.
Ich antwortete auch in dieser doppelten Frage .
Mit neueren Versionen von tmux (v1.8, aber vielleicht auch in v1.7):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
$PWD
scheint in tmux 1.9a nicht zu funktionieren. Ich musste pane_current_path
wie oben vorgeschlagen verwenden.
Die anderen Antworten funktionieren bei mir nicht, wenn ich versuche, sie (speziell tmux split-window -c
) als Bindungen zu verwenden . Aber ich habe mir eine eigene Lösung ausgedacht, die ich seit mehr als einem Jahr verwende und die sowohl für neue Fenster als auch für Teilungen funktioniert:
~/.bashrc
:
PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'
~/.tmux.conf
:
unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window
bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"
Funktioniert zumindest mit $ (tmux -V) 1.8. In den auskommentierten Zeilen finden Sie eine Version für ältere tmuxes, die nicht über den Befehl show-environment verfügen.
tmux hat das in Version 1.8 getan, aber in Version 1.9 wurde diese Funktion zugunsten der Verwendung von -c
flag entfernt.
Dies kann gelöst, aber erneut gebunden werden, new-window
aber wenn Sie etwas anderes ausführen möchten, wird es zu wortreich: Anstatt neww man tmux
zu tippen neww -c "#{pane_current_path}" man tmux
, müssen Sie das eingeben , was Sie höchstwahrscheinlich nicht tun möchten.
Es gibt einen Mod von tmux (ich bin der Autor), der tmux eine geeignete Skriptsprache hinzufügt, um die Verwendung von Aliasen, das Binden mehrerer Befehle im Modus, von Variablen, Schleifen usw. zu ermöglichen : Neue Fenster und Bereiche werden im aktuellen Verzeichnis geöffnet.
Es kann aus folgenden Quellen erstellt werden: http://ershov.github.io/tmux/
<prefix>c
, um das Arbeitsverzeichnis der zugrunde liegenden Shell-Instanz (falls vorhanden) zu lesen und dasdefault-path
vor der Ausführung festzulegennew-window
. Oder ist das zu viel verlangt von tmux :)