Abra una nueva pestaña en el mismo directorio

41

Digamos que está en la carpeta / very / cool / y / deeply / nested /. Y desea abrir una nueva pestaña de terminal en la misma carpeta.

¿Cómo lo harías tú?

Yo uso Mac OS y Zsh.

Nerian
fuente

Respuestas:

62

Use Oh-My-Zsh y agregue el complemento 'osx' en su ~ / .zshrc como:

plugins=(osx)

Si usa la aplicación Terminal de OSX, también necesita agregar el terminalappcomplemento: crédito

plugins=(osx terminalapp)

Si usa iTerm, debe establecer una opción de configuración ( tenga en cuenta que es posible que no necesite los complementos zsh para que esto funcione ): crédito

Preferencias> Perfiles> Predeterminado> General> Directorio de trabajo> Reutilizar la opción de directorio de la sesión anterior

Actualización del panel de preferencias de iTerm2 para reutilizar el directorio de la sesión anterior.

¡Eso es todo lo que necesitas hacer!

Pieter
fuente
1
¿Esto también funciona en iTerm?
ahmy
2
Esto funciona para mí a menos que esté ejecutando un proceso en la consola. Si tengo un proceso, digamos en railsejecución, y trato de abrir una nueva ventana mediante el comando-n, termino de nuevo en mi directorio de inicio.
YWCA Hola
@YWCAHola, ¿has encontrado la solución a este problema?
Michał Miszczyszyn
@Miszy Regresé a Vanilla Bash: /
YWCA Hola,
23

Otra opción ahora disponible en Mac OS X Lion es usar la función incorporada. Utiliza 'secuencias de escape' para encontrar el directorio actual. Para mí funciona si uso estos comandos en mi .zshrc:

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

También es posible usar PS1(para Bash, de esta wiki ):

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

donde \e]2;está la secuencia de escape para imprimir cosas en la barra de título. Se parece que Terminal.app está recibiendo su información a partir de ahí.

Más información:

Tim
fuente
Además, creo que oh-my-zsh tiene esto por defecto. He estado usando esto durante una semana más o menos y funciona prácticamente de inmediato.
Tim
A partir de Mac OS X Lion 10.7, Terminal mostrará el directorio de trabajo utilizando el icono "proxy" en la barra de título, tiene opciones para crear nuevos terminales en el mismo directorio y es compatible con Terminales de reanudación. Para su comodidad, Terminal examinará el contenido de los títulos de las ventanas / pestañas para ver si contienen un nombre de ruta válido. Sin embargo, /etc/bashrcverá que también admite un nuevo código de escape para informar a Terminal del directorio de trabajo utilizando una file:URL, que puede manejar todos los nombres de ruta válidos mediante codificación porcentual (los títulos de ventana / pestaña solo pueden contener un subconjunto de caracteres ASCII )
Chris Page
2
La secuencia de escape para configurar el directorio de trabajo es el mismo código básico que para configurar los títulos —Comando del sistema operativo (OSC) —con el código 7 en lugar de 0-2:\e]7;file://hostname/percent-encoded-pathname\a
Chris Page
3
¿Por qué usar precmd y preexec? ¿Por qué no solo chpwd () {print -Pn "\e]2; %~/ \a"}?
Nick
1
Entiendo cómo esto actualiza la barra de título, pero no entiendo cómo esto hace que se abra una nueva pestaña en el mismo directorio que la pestaña anterior.
mareoraft
3

Esta es una versión muy simple que utilicé en bash y también funciona en zsh. Guarda la carpeta actual en un archivo, después de cada comando (no daña demasiado la OMI) y abre un nuevo terminal en la carpeta actual guardada.

agregue lo siguiente 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)"
mjspier
fuente
Esto es genial, pero requiere que realmente ejecutes un comando en una pestaña para actualizar. Esto en casos raros puede causar un comportamiento inesperado. ¿Quizás hay una función diferente que podemos usar que se activa cuando cambia de pestaña en lugar de ejecutar un comando?
mareoraft
1

gdirs parece una forma de casi hacerlo: nueva pestaña, luego gdirs para seleccionar el directorio profundo y listo. Mi primera idea fue hacer que la pila de directorios se compartiera entre todas las pestañas y hacer cd ~ 1 después de la nueva pestaña, pero no puedo encontrar cómo hacerlo, ya que parece que cada instancia de zsh mantiene la suya. El intercambio de historial se realiza a través de un archivo común, por lo que quizás eso también se pueda hacer aquí ...

Henno
fuente
0

Así es como lo haces en bash.

Este script de shell le dirá (silenciosamente, literalmente, usando Applescript) Terminal.app para abrir una nueva pestaña y luego cambiar al directorio actual:

#!/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

... coloque el script de shell anterior en un directorio en su $PATH(es decir, / usr / local / bin) y asegúrese de que sea ejecutable:

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

( fuente )

Nifle
fuente
Tenga en cuenta que a partir de Mac OS X Lion 10.7, por defecto, Terminal iniciará nuevas pestañas en el mismo directorio de trabajo que la pestaña anterior. Por lo tanto, solo necesita organizar la creación de la pestaña ahora. (Si está usando bash. Si está usando otro shell, mire el código en / etc / bashrc para saber cómo informarle a Terminal sobre el directorio de trabajo actual.)
Chris Page
0

Si necesita abrir esta nueva pestaña ahora mismo, sin cambiar sus archivos de configuración o instalar nuevos complementos, ejecute esto:

pwd | pbcopy

Luego abra una nueva pestaña Terminal manualmente (con ⌘T), y en la nueva pestaña:

cd "`pbpaste`"

Advertencia : esto sobrescribirá el contenido del portapapeles del sistema.


Un método alternativo más largo que no sobrescribe el portapapeles:

pwd > $TMPDIR/wd

Abre tu nueva pestaña.

cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd
Rory O'Kane
fuente
0

Según el comentario anterior de Pieter, una vez que plugins=(git osx)se instalan los complementos, puede escribir taby se abrirá una nueva pestaña en su directorio actual.

Caso
fuente
0

Si desea que el directorio cambie automáticamente cuando se abre una nueva pestaña, use el complemento dirpersist .

El complemento osx solo guarda el último directorio, pero debe ejecutar el comando tabpara abrir una nueva pestaña, lo que no siempre es posible (si, por ejemplo, está ejecutando algo en su pestaña actual).

garageàtrois
fuente
0

Agregar terminlapp a .zshrc no funcionó para mí, así que busqué el complemento ~/.oh-my-zsh/plugins/terminalappy me 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.
Steve Root
fuente
0

Nuevas pestañas ya se abren en la misma carpeta (Cmd + T). Para nuevas ventanas (Cmd + N) la solución de Pieter es la correcta:

Preferencias> Perfiles> Predeterminado> General> Directorio de trabajo> Reutilizar la opción de directorio de la sesión anterior

Punnerud
fuente