Apri una nuova scheda nella stessa directory


41

Supponi di essere nella cartella / very / cool / e / deep / nested /. E vuoi aprire una nuova scheda terminale nella stessa cartella.

Come lo faresti?

Uso Mac OS e Zsh.

Risposte:


62

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

plugins=(osx)

Se usi l'app terminale OSX, devi anche aggiungere il terminalappplug-in: credito

plugins=(osx terminalapp)

Se usi iTerm devi impostare un'opzione di configurazione (tieni presente che potresti non aver bisogno dei plugin zsh perché funzioni ): credit

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

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

Questo è tutto ciò che devi fare!


1
funziona anche in iTerm?
ahmy


2
Questo funziona per me a meno che non stia eseguendo un processo nella console. Se ho un processo, diciamo in railsesecuzione, e provo ad aprire una nuova finestra tramite command-n, finisco di nuovo nella mia home directory.
YWCA Ciao,

@YWCAHello hai trovato la soluzione a questo problema?
Michał Miszczyszyn,

@Miszy sono tornato alla vaniglia Bash: /
YWCA Ciao

23

Un'altra opzione ora disponibile in Mac OS X Lion è l'utilizzo della funzione integrata. 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 possibile usare PS1(per Bash, da questo wiki ):

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

dov'è \e]2;la sequenza di escape per stampare cose nella barra del titolo. E sembra che Terminal.app sta ottenendo le sue informazioni da lì.

Maggiori informazioni:


inoltre, penso che oh-my-zsh abbia questo di default. Lo sto usando da una settimana o giù di lì adesso e funziona praticamente fuori dalla scatola.
Tim

A partire da Mac OS X Lion 10.7, Terminal visualizzerà la directory di lavoro utilizzando l'icona "proxy" nella barra del titolo, ha opzioni per creare nuovi terminali nella stessa directory e supporta la ripresa dei terminali. Per comodità, Terminal esaminerà il contenuto dei titoli delle finestre / schede per vedere se contengono un percorso valido. Tuttavia, /etc/bashrcvedrai che supporta anche un nuovo codice di escape per informare Terminal della directory di lavoro utilizzando un file:URL, che può gestire tutti i nomi di percorso validi tramite codifica percentuale (i titoli di finestre / schede possono contenere solo un sottoinsieme di caratteri ASCII ).
Chris Pagina

2
La sequenza di escape per l'impostazione della directory di lavoro è lo stesso codice di base per l'impostazione dei titoli — OSC (Operating System Command) —con il codice 7 anziché 0-2:\e]7;file://hostname/percent-encoded-pathname\a
Chris Pagina

3
Perché usare precmd e preexec? Perché non solo chpwd () {print -Pn "\e]2; %~/ \a"}?
Nick,

1
Capisco come questo aggiorna la barra del titolo, ma non capisco come questo causi l'apertura di una nuova scheda nella stessa directory della scheda precedente.
mareoraft,

3

Questa è una versione molto semplice che ho usato in bash e funziona anche in zsh. Salva la cartella corrente in un file, dopo ogni comando (non danneggia troppo l'IMO) e apre un nuovo terminale nella cartella corrente salvata.

aggiungi quanto segue 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)"

Questo è bello ma richiede di eseguire effettivamente un comando in una scheda per l'aggiornamento. In rari casi ciò può causare comportamenti imprevisti. Forse c'è una funzione diversa che possiamo usare che viene attivata quando si cambia scheda invece di eseguire un comando?
mareoraft,

1

gdirs sembra quasi un modo per farlo: nuova scheda, quindi gdirs per selezionare la directory profonda e voilà. La mia prima idea è stata quella di rendere lo stack di directory condiviso tra tutte le schede e fare cd ~ 1 dopo la nuova scheda, ma non riesco a trovare come farlo, poiché sembra che ogni istanza di zsh mantenga la propria. La condivisione della cronologia passa attraverso un file comune, quindi forse potrebbe essere fatto anche qui ...


0

Ecco come lo fai in bash.

Questo script di shell dirà (letteralmente tranquillo, usando Applescript) Terminal.app per aprire una nuova scheda e 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

... metti lo script della shell sopra in una directory nel tuo $PATH(es. / Usr / local / bin) e assicurati che sia eseguibile:

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

( fonte )


Si noti che a partire da Mac OS X Lion 10.7, per impostazione predefinita Terminal avvierà nuove schede nella stessa directory di lavoro della scheda precedente. Quindi devi solo organizzare per creare la scheda ora. (Se stai usando bash. Se stai usando un'altra shell, guarda il codice in / etc / bashrc per come dire a Terminal della directory di lavoro corrente.)
Chris Pagina

0

Se devi aprire subito questa nuova scheda, senza modificare i file di configurazione o installare nuovi plugin, esegui questo:

pwd | pbcopy

Quindi aprire manualmente una nuova scheda Terminale (con ⌘T) e nella nuova scheda:

cd "`pbpaste`"

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


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

pwd > $TMPDIR/wd

Apri la tua nuova scheda.

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

0

Per il commento di Pieter sopra, una volta plugins=(git osx)installati i plugin, puoi semplicemente digitare tabe si aprirà una nuova scheda nella tua directory corrente.


0

Se vuoi che la directory cambi automaticamente quando viene aperta una nuova scheda, usa il plugin dirpersist .

Il plugin osx salva solo l'ultima directory ma devi eseguire il comando tabper aprire una nuova scheda, il che non è sempre possibile (se, diciamo, stai eseguendo qualcosa nella tua scheda corrente).


0

L'aggiunta di terminalapp a .zshrc non ha funzionato per me, quindi ho cercato il plugin ~/.oh-my-zsh/plugins/terminalappe 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.

0

Nuove schede già aperte nella stessa cartella (Cmd + T). Per le nuove finestre (Cmd + N) la soluzione di Pieter è corretta:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.