it-swarm.it

Come creare una nuova finestra sulla directory corrente in tmux?

È possibile aprire un new-window con la sua directory di lavoro impostata su quella in cui mi trovo attualmente. Sto usando zsh, se è importante.

217
Shrikant Sharat

A partire da tmux 1.9 l'opzione default-path È stata rimossa, quindi è necessario utilizzare l'opzione -c Con new-window E split-window (Ad es. Rilegando le associazioni c, " E % Da includere
-c '#{pane_current_path}'). Vedi alcune delle altre risposte a questa domanda per i dettagli.


Una caratteristica rilevante è atterrata nel trunk tmux SVN all'inizio di febbraio 2012. In tmux build che includono questo codice, tmux i tasti di scelta rapida che invocano new-window creeranno una nuova finestra con la stessa directory di lavoro corrente del i processi attivi del riquadro corrente (purché l'opzione della sessione default-path sia vuota; è per impostazione predefinita). Lo stesso vale per il riquadro creato dal comando split-window Quando viene invocato tramite un'associazione.

Questo utilizza uno speciale codice specifico per la piattaforma, quindi al momento sono supportati solo determinati SO: 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 il solito <prefix> c key binding), allora ho impostato il 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.

tmux FAQ ha una voce intitolata "Come posso aprire una nuova finestra nella stessa directory della finestra corrente?" quello descrive un altro approccio; è un po 'contorto però.

150
Chris Johnsen

La pagina man attuale di Tmux (1.9a) elenca un -c start-directory parametro per alcuni comandi, tra cui new-window e split-window. Contiene anche la variabile di formato pane_current_path, che fa riferimento al 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 offerte 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 al tuo .tmux.conf. Il " con le virgolette circostanti è dire a Tmux che non dovrebbe iniziare una stringa ma piuttosto associare il " chiave.

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
293
Simon Kohlmeyer

Sì, usa new-window -c "#{pane_current_path}". Puoi aggiungere quanto segue al tuo ~/.tmux.conf per renderlo persistente (presupponendo le combinazioni di tasti predefinite):

bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

Il default-path l'impostazione del percorso era rimossa dal codice upstream e tmux l'autore raccomandato in quel messaggio di commit usando -c "#{pane_current_path}" o -c "$PWD nel new-window e split-window comandi.

Ho anche risposto in questo domanda duplicata .

43
mmoya

Con le versioni recenti di tmux (v1.8, ma forse anche nella v1.7):

tmux new-window -c "$PWD"
10
mislav

Le altre risposte non funzionano per me quando provo a metterle come associazioni (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 non commentate qui per una versione che funziona per tmux meno recenti che non hanno il comando show-environment.

3
Erik Westrup

tmux lo ha fatto nella versione 1.8 ma in 1.9 questa funzione è stata rimossa a favore dell'utilizzo di -c bandiera.

Questo può essere risolto ma rilegando new-window ma nel caso tu voglia eseguire qualcos'altro diventa troppo prolisso: invece di digitare neww man tmux dovrai digitare neww -c "#{pane_current_path}" man tmux che molto probabilmente non vuoi fare.

C'è una mod di tmux (io sono l'autore) per aggiungere un linguaggio di scripting adeguato 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/

0
Yuriy Ershov