Aprire una nuova scheda nella stessa directory

Dire che sei in / very / cool / e / deeply / nested / cartella. E si desidera aprire una nuova scheda terminal nella stessa cartella.

Come faresti?

Uso Mac OS e Zsh.

Utilizza Oh-My-Zsh e aggiungi il plugin 'osx' nel tuo ~ / .zshrc come:

plugins=(osx) 

Se si utilizza l'applicazione Terminal di OSX, è necessario anche aggiungere il plug-in di terminalapp : credito

 plugins=(osx terminalapp) 

Se si utilizza iTerm è necessario impostare un'opzione di configuration ( Nota che potrebbero non essere necessari i plugin zsh per funzionare ): credito

Preferenze> Profili> Predefinito> Generale> Directory di lavoro> Riutilizza l'opzione di directory della session precedente

Aggiornamento del pannello Preferenze di iTerm2 per riutilizzare la directory di sessione precedente.

Questo è tutto quello che devi fare!

Un'altra opzione ora disponibile in Mac OS X Lion è la funzionalità incorporata. Utilizza "sequenze di escape" per scoprire la directory corrente. Per me funziona se uso questi comandi nel mio .zshrc:

 precmd () {print -Pn "\e]2; %~/ \a"} preexec () {print -Pn "\e]2; %~/ \a"} 

è anche ansible utilizzare PS1 (per Bash, da questa wiki ):

 export PS1="\[\e]2;\[email protected]\H \w\a\e[32;1m\]>\[\e[0m\] " 

where \e]2; è la sequenza di escape per printingre le cose nella barra del titolo. Sembra che Terminal.app sta ottenendo le sue informazioni da lì.

Maggiori informazioni:

Questa è una versione molto semplice che ho usato in bash e funziona anche in zsh. Consente di salvare la cartella corrente in un file, dopo each command (non pregiudica troppo IMO) e apre un nuovo terminal nella cartella corrente salvata.

aggiungere la seguente a .zshrc

 # emulate bash PROMPT_COMMAND (only for zsh) precmd() { eval "$PROMPT_COMMAND" } # open new terminal in same dir PROMPT_COMMAND='pwd > "${HOME}/.cwd"' [[ -f "${HOME}/.cwd" ]] && cd "$(< ${HOME}/.cwd)" 

gdirs sembra un modo per farlo quasi: nuova scheda, quindi gdirs per select la directory profonda e voila. La mia prima idea era quella di rendere la stack di directory condivisa tra tutte le tabs e fare cd ~ 1 dopo la nuova scheda, ma non riesco a trovare come farlo, come sembra che each istanza di zsh mantiene la propria. La condivisione della storia va attraverso un file comune, quindi forse anche questo potrebbe essere fatto qui …

Questo è come farlo in bash.

Questo script shell dirà (tranquillamente letteralmente, utilizzando Applescript) Terminal.app per aprire una nuova scheda quindi passare alla directory corrente:

 #!/bin/bash osascript -e 'tell application "Terminal"' \ -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \ -e "do script with command \"cd `pwd`;clear\" in selected tab of the front window" \ -e 'end tell' &> /dev/null 

… mettere lo script di shell sopra in una directory nel tuo $PATH (es. / Usr / local / bin) e assicurarsi che sia eseguibile:

 $ chmod +x /usr/local/bin/nt 

( fonte )

Se è necessario aprire questa nuova scheda in questo momento, senza modificare i file di configuration o installare nuovi plugin, eseguire questa operazione:

 pwd | pbcopy 

Quindi apri manualmente una nuova scheda terminal (con ⌘T) e nella nuova scheda:

 cd "`pbpaste`" 

Attenzione : questo sovrascriverà il contenuto degli Appunti di sistema.


Un metodo alternativo e più lungo che non sovrascrive gli appunti:

 pwd > $TMPDIR/wd 

Apri la tua nuova scheda.

 cd "$(cat $TMPDIR/wd)" rm -f $TMPDIR/wd 

Per il commento di Pieter sopra, una volta che i plugins=(git osx) sono installati, è sufficiente digitare la tab e aprirà una nuova scheda nella tua directory corrente.

Se si desidera che la directory cambia automaticamente quando si apre una nuova scheda, utilizzare il plugin dirpersist .

Il plug-in osx salva solo l'ultima directory, ma devi eseguire la tab command per aprire una nuova scheda, che non è sempre ansible (se, per esempio, stai eseguendo qualcosa nella tua scheda corrente).

L'aggiunta di un interfaceapp a .zshrc non funzionava per me, quindi ho cercato il plugin ~/.oh-my-zsh/plugins/terminalapp e mi dice:

 # This file is intentionally empty. # # The terminalapp plugin is deprecated and may be removed in a future release. # Its functionality has been folded in to the core lib/termsupport.zsh, which # is loaded for all users. You can remove terminalapp from your $plugins list # once all your systems are updated to the current version of Oh My Zsh.