Respostas:
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 terminalapp
plug-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
É tudo o que você precisa fazer!
rails
executando, e tentar abrir uma nova janela via comando n, acabo voltando ao meu diretório pessoal.
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:
/etc/bashrc
você 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 )
\e]7;file://hostname/percent-encoded-pathname\a
chpwd () {print -Pn "\e]2; %~/ \a"}
?
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)"
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 ...
É 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 )
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
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 tab
para abrir uma nova guia, o que nem sempre é possível (se, por exemplo, você estiver executando algo na sua guia atual).
Adicionar terminalapp ao .zshrc não funcionou para mim, então procurei o plugin ~/.oh-my-zsh/plugins/terminalapp
e 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.