È possibile aprire un new-windowcon la sua directory di lavoro impostata su quella in cui mi trovo attualmente. Sto usando zsh , se è importante.
È possibile aprire un new-windowcon 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-pathopzione è stata rimossa, quindi è necessario utilizzare l' -copzione 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-windowcreeranno una nuova finestra con la stessa directory di lavoro corrente dei processi attivi del riquadro corrente (purché la default-pathsessione l'opzione è vuota; è di default). Lo stesso vale per il riquadro creato dal split-windowcomando 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 cassociazione di tasti <prefix> ), quindi ho impostato l' default-pathopzione 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/cwdsu 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-pathdell'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-windowe new-session(invece di neww).
La pagina man attuale di Tmux (1.9a) elenca un -c start-directoryparametro opzionale per alcuni comandi, incluso new-windowe 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.confper 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-pathimpostazione del percorso è stata rimossa dal codice upstream e tmux author raccomandato in quel messaggio di commit usando -c "#{pane_current_path}"o -c "$PWDnei comandi new-windowe 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"
$PWDnon sembra funzionare per me in tmux 1.9a. Ho dovuto usare pane_current_pathcome 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 -cflag.
Questo può essere risolto ma rilegato, new-windowma nel caso in cui desideri eseguire qualcos'altro diventa troppo prolisso: invece di digitare neww man tmuxdovrai digitare neww -c "#{pane_current_path}" man tmuxciò 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>cper mappare per leggere la directory di lavoro dell'istanza della shell sottostante (se presente) e impostare ildefault-pathprecedente all'esecuzionenew-window. O è troppo chiedere di tmux :)