È possibile aprire un new-window
con la sua directory di lavoro impostata su quella in cui mi trovo attualmente. Sto usando zsh , se è importante.
È possibile aprire un new-window
con la sua directory di lavoro impostata su quella in cui mi trovo attualmente. Sto usando zsh , se è importante.
Risposte:
A partire dal tmux 1.9 l' default-path
opzione è stata rimossa, quindi è necessario utilizzare l' -c
opzione con new-window
, e split-window
(ad esempio rebinding il c
, "
e %
attacchi per includere
-c '#{pane_current_path}'
). Vedi alcune delle altre risposte a questa domanda per i dettagli.
Una caratteristica pertinente è approdata nel trunk SVN di tmux all'inizio di febbraio 2012. Nelle build di tmux che includono questo codice, i bind dei tasti tmux che invocano new-window
creeranno una nuova finestra con la stessa directory di lavoro corrente dei processi attivi del riquadro corrente (purché la default-path
sessione l'opzione è vuota; è di default). Lo stesso vale per il riquadro creato dal split-window
comando quando viene richiamato tramite un'associazione.
Questo utilizza un codice speciale specifico per la piattaforma, quindi al momento sono supportati solo determinati sistemi operativi: Darwin (OS X), FreeBSD, Linux, OpenBSD e Solaris.
Questo dovrebbe essere disponibile nella prossima versione di tmux (1.7?).
Con tmux 1.4, di solito uso solo
tmux neww
in una shell che ha già la directory di lavoro corrente desiderata.
Se, tuttavia, prevedo la necessità di creare molte finestre con la stessa directory di lavoro corrente (o voglio essere in grado di avviarle con la solita c
associazione di tasti <prefix> ), quindi ho impostato l' default-path
opzione di sessione tramite
tmux set-option default-path "$PWD"
in una shell che ha già la directory di lavoro corrente desiderata (anche se ovviamente è possibile farlo da qualsiasi directory e specificare semplicemente il valore).
Se default-path
è impostato su un valore non vuoto, verrà utilizzato il suo valore anziché "ereditare" la directory di lavoro corrente dalle invocazioni della riga di comando di tmux neww
.
Le FAQ di tmux hanno una voce intitolata "Come posso aprire una nuova finestra nella stessa directory della finestra corrente?" Che descrive un altro approccio; è un po 'contorto però.
/proc/PID/cwd
su Linux)). Esiste una possibile soluzione parziale in una voce delle FAQ di tmux (ha la shell che registra il suo cwd quando stampa un prompt, quindi associa una chiave che avvia una nuova shell nella directory registrata).
default-path
dell'opzione sessione (se impostato). Le FAQ di tmux hanno una voce che descrive un modo per associare una chiave che avvia una nuova finestra con il cwd della shell in esecuzione nella finestra corrente ("Come posso aprire una nuova finestra nella stessa directory della finestra corrente?") , ma il metodo è piuttosto contorto. Lo stesso potrebbe probabilmente essere fatto per split-window
e new-session
(invece di neww
).
La pagina man attuale di Tmux (1.9a) elenca un -c start-directory
parametro opzionale per alcuni comandi, incluso new-window
e split-window
. Contiene anche la variabile di formato pane_current_path
, che fa riferimento a
Current path if available
.
Combinando questi, possiamo aprire una nuova finestra con la directory di lavoro corrente usando
new-window -c "#{pane_current_path}"
Le quotazioni sono necessarie nel caso in cui il percorso corrente contenga spazi.
Se si desidera dividere verticalmente il riquadro corrente, utilizzare
split-window -c "#{pane_current_path}"
o, per una divisione orizzontale
split-window -h -c "#{pane_current_path}"
Per fare in modo che le associazioni di tasti aprano nuove divisioni e finestre con la directory di lavoro corrente per impostazione predefinita, aggiungi quanto segue a .tmux.conf
. Le "
citazioni circostanti devono dire a Tmux che non dovrebbe iniziare una stringa ma piuttosto associare la "chiave.
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
prefix
- :
, quindi digitasource ~/.tmux.conf
tmux source-file .tmux.conf
.
Sì, usa new-window -c "#{pane_current_path}"
. È possibile aggiungere quanto segue al proprio ~/.tmux.conf
per renderlo persistente (assumendo i tasti di scelta predefinita):
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
L' default-path
impostazione del percorso è stata rimossa dal codice upstream e tmux author raccomandato in quel messaggio di commit usando -c "#{pane_current_path}"
o -c "$PWD
nei comandi new-window
e split-window
.
Ho anche risposto a questa duplice domanda .
Con le versioni recenti di tmux (v1.8, ma forse anche nella v1.7):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
$PWD
non sembra funzionare per me in tmux 1.9a. Ho dovuto usare pane_current_path
come suggerito sopra.
Le altre risposte non funzionano per me quando provo a metterle come attacchi (in particolare tmux split-window -c
). Ma ho inventato la mia soluzione che sto usando da più di un anno che funziona sia per la nuova finestra che per le divisioni:
~/.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"
Funziona, almeno, con $ (tmux -V) 1.8. Vedi le righe commentate qui per una versione che funziona per i vecchi tmux che non hanno il comando show-environment.
tmux lo ha fatto nella versione 1.8 ma in 1.9 questa funzione è stata rimossa a favore dell'uso di -c
flag.
Questo può essere risolto ma rilegato, new-window
ma nel caso in cui desideri eseguire qualcos'altro diventa troppo prolisso: invece di digitare neww man tmux
dovrai digitare neww -c "#{pane_current_path}" man tmux
ciò che molto probabilmente non vuoi fare.
C'è una mod di tmux (io sono l'autore) per aggiungere un linguaggio di scripting appropriato a tmux per consentire l'uso di alias, l'associazione di più comandi in 'mode', variabili, loop, ecc ... E inoltre, riporta quel comportamento : nuove finestre e riquadri vengono aperti nella directory corrente.
Può essere costruito da fonti qui: http://ershov.github.io/tmux/
<prefix>c
per mappare per leggere la directory di lavoro dell'istanza della shell sottostante (se presente) e impostare ildefault-path
precedente all'esecuzionenew-window
. O è troppo chiedere di tmux :)