Abra uma nova guia no mesmo diretório

41

Digamos que você esteja na pasta / very / cool / e / profundamente / aninhada /. E você deseja abrir uma nova guia do terminal na mesma pasta.

Como você faria isso?

Eu uso o Mac OS e o Zsh.

Nerian
fonte

Respostas:

62

Use Oh-My-Zsh e adicione o plugin 'osx' no seu ~ / .zshrc como:

plugins=(osx)

Se você usa o Terminal App do OSX, também precisa adicionar o terminalappplug-in: credit

plugins=(osx terminalapp)

Se você usa o iTerm, precisa definir uma opção de configuração ( observe que talvez você não precise dos plugins zsh para que isso funcione ): credit

Preferências> Perfis> Padrão> Geral> Diretório de Trabalho> Reutilizar a opção de diretório da sessão anterior

Atualização do painel Preferências do iTerm2 para reutilizar o diretório da sessão anterior.

É tudo o que você precisa fazer!

Pieter
fonte
1
isso também funciona no iTerm?
ahmy 30/05
2
Isso funciona para mim, a menos que eu esteja executando um processo no console. Se eu tiver um processo, digamos railsexecutando, e tentar abrir uma nova janela via comando n, acabo voltando ao meu diretório pessoal.
YWCA Olá
Olá, você encontrou a solução para este problema?
Michał Miszczyszyn
@Miszy Voltei para a baunilha Bash: /
YWCA Hello
23

Outra opção agora disponível no Mac OS X Lion está usando o recurso interno. Ele usa 'seqüências de escape' para descobrir o diretório atual. Para mim, funciona se eu usar esses comandos no meu .zshrc:

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

também é possível usar PS1(para Bash, neste wiki ):

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

onde \e]2;é a sequência de escape para imprimir itens na barra de título. Ele parece que Terminal.app está recebendo suas informações de lá.

Mais Informações:

Tim
fonte
Além disso, acho que o oh-my-zsh tem isso por padrão. Estou usando isso há uma semana ou mais e agora funciona praticamente fora da caixa.
Tim
No Mac OS X Lion 10.7, o Terminal exibirá o diretório de trabalho usando o ícone “proxy” na barra de título, tem opções para criar novos terminais no mesmo diretório e oferece suporte aos terminais de retomada. Por conveniência, o Terminal examinará o conteúdo dos títulos das janelas / guias para ver se eles contêm um nome de caminho válido. No entanto, /etc/bashrcvocê verá que ele também suporta um novo código de escape para informar o Terminal do diretório de trabalho usando uma file:URL, que pode manipular todos os nomes de caminho válidos por meio de codificação percentual (os títulos da janela / guia podem conter apenas um subconjunto de caracteres ASCII )
31512 Chris Página
2
A sequência de escape para definir o diretório de trabalho é o mesmo código básico como para definir os títulos Operacional Command System (OSC) -com código 7 em vez de 0-2:\e]7;file://hostname/percent-encoded-pathname\a
Chris Page
3
Por que usar precmd e preexec? Por que não apenas chpwd () {print -Pn "\e]2; %~/ \a"}?
21412 Nick
1
Entendo como isso atualiza a barra de título, mas não entendo como isso faz com que uma nova guia seja aberta no mesmo diretório da guia anterior.
mareoraft
3

Esta é uma versão muito simples que eu usei no bash e também funciona no zsh. Ele salva a pasta atual em um arquivo, após cada comando (Não fere muito IMO) e abre um novo terminal na pasta atual salva.

adicione o seguinte 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
fonte
Isso é legal, mas requer que você realmente execute um comando em uma guia para atualizar. Em casos raros, isso pode causar comportamento inesperado. Talvez exista uma função diferente que possa ser acionada quando você alternar entre guias, em vez de executar um comando?
Mareoraft
1

O gdirs parece uma maneira de quase fazê-lo: nova guia, depois o gdirs para selecionar o diretório mais profundo e pronto. Minha primeira idéia foi tornar a pilha de diretórios compartilhada entre todas as guias e fazer o cd ~ 1 após a nova guia, mas não consigo encontrar como fazer isso, pois parece que cada instância do zsh mantém a sua. O compartilhamento de histórico passa por um arquivo comum, então talvez isso também possa ser feito aqui ...

Henno
fonte
0

É assim que você faz no bash.

Esse script de shell informará (silenciosamente literalmente, usando o Applescript) Terminal.app para abrir uma nova guia e depois alternar para o diretório atual:

#!/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 o script do shell acima em um diretório no seu $PATH(ie / usr / local / bin) e verifique se ele é executável:

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

( fonte )

Nifle
fonte
Observe que no Mac OS X Lion 10.7, por padrão, o Terminal iniciará novas guias no mesmo diretório de trabalho da guia anterior. Então, você só precisa organizar a criação da guia agora. (Se você estiver usando bash Se você estiver usando outro shell, olhada no código em / etc / bashrc para saber como dizer Terminal sobre o diretório de trabalho atual..)
Chris Page
0

Se você precisar abrir essa nova guia agora mesmo, sem alterar seus arquivos de configuração ou instalar novos plugins, execute o seguinte:

pwd | pbcopy

Em seguida, abra uma nova guia Terminal manualmente (com ⌘T) e na nova guia:

cd "`pbpaste`"

Aviso : isso substituirá o conteúdo da área de transferência do sistema.


Um método alternativo e mais longo que não substitui a área de transferência:

pwd > $TMPDIR/wd

Abra sua nova guia.

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

De acordo com o comentário de Pieter acima, uma vez que os plugins=(git osx)plug - ins estejam instalados, basta digitar tabe ele abrirá uma nova guia no diretório atual.

Caso
fonte
0

Se você deseja que o diretório seja alterado automaticamente quando uma nova guia é aberta, use o plugin dirpersist .

O plugin osx salva apenas o último diretório, mas você precisa executar o comando tabpara abrir uma nova guia, o que nem sempre é possível (se, por exemplo, você estiver executando algo na sua guia atual).

garageàtrois
fonte
0

Adicionar terminalapp ao .zshrc não funcionou para mim, então procurei o plugin ~/.oh-my-zsh/plugins/terminalappe ele me diz:

# 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
fonte
0

Novas guias já abertas na mesma pasta (Cmd + T). Para novas janelas (Cmd + N), a solução da Pieter está correta:

Preferências> Perfis> Padrão> Geral> Diretório de Trabalho> Reutilizar a opção de diretório da sessão anterior

Punnerud
fonte