Odpowiedzi:
Użyj Oh-My-Zsh i dodaj wtyczkę „osx” w swoim ~ / .zshrc, np .:
plugins=(osx)
Jeśli używasz aplikacji terminalowej OSX, musisz również dodać terminalapp
wtyczkę: kredyt
plugins=(osx terminalapp)
Jeśli korzystasz z iTerm, musisz ustawić opcję konfiguracji ( pamiętaj, że nie potrzebujesz wtyczek zsh, aby to działało ): kredyt
Preferencje> Profile> Domyślne> Ogólne> Katalog roboczy> Użyj ponownie opcji katalogu poprzedniej sesji
To wszystko, co musisz zrobić!
rails
uruchomiony, i próbuję otworzyć nowe okno za pomocą polecenia n, kończę z powrotem w moim katalogu domowym.
Inną opcją dostępną teraz w systemie Mac OS X Lion jest korzystanie z wbudowanej funkcji. Wykorzystuje „sekwencje specjalne”, aby znaleźć bieżący katalog. Dla mnie to działa, jeśli użyję tych poleceń w moim .zshrc:
precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}
możliwe jest również użycie PS1
(dla Bash, z tej wiki ):
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "
gdzie \e]2;
jest sekwencja ucieczki do drukowania rzeczy na pasku tytułowym. To wydaje się , że jest coraz Terminal.app swoje informacje stamtąd.
Więcej informacji:
/etc/bashrc
zobaczysz, że obsługuje on także nowy kod ucieczki do informowania terminalu o katalogu roboczym za pomocą file:
adresu URL, który może obsłużyć wszystkie prawidłowe nazwy ścieżek za pomocą kodowania procentowego (tytuły okna / karty mogą zawierać tylko podzbiór znaków ASCII ).
\e]7;file://hostname/percent-encoded-pathname\a
chpwd () {print -Pn "\e]2; %~/ \a"}
?
Jest to bardzo prosta wersja, której użyłem w bash, a także działa w zsh. Zapisuje bieżący folder w pliku po każdym poleceniu (nie szkodzi zbytnio IMO) i otwiera nowy terminal w zapisanym bieżącym folderze.
dodaj następujące .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 wydaje się sposobem na prawie to zrobić: nowa karta, a następnie gdirs, aby wybrać głęboki katalog i voila. Moim pierwszym pomysłem było udostępnienie stosu katalogów wszystkim kartom i zrobienie cd ~ 1 po nowej karcie, ale nie mogę znaleźć, jak to zrobić, ponieważ wydaje się, że każda instancja zsh zachowuje swoją własną. Udostępnianie historii odbywa się za pomocą wspólnego pliku, więc może i tutaj można to zrobić ...
Tak to robisz w bashu.
Ten skrypt powłoki powie (cicho, dosłownie przy użyciu Applescript) Terminal.app, aby otworzyć nową kartę, a następnie przejść do bieżącego katalogu:
#!/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
… Umieść powyższy skrypt powłoki w katalogu $PATH
(np. / Usr / local / bin) i upewnij się, że jest wykonywalny:
$ chmod +x /usr/local/bin/nt
( źródło )
Jeśli chcesz teraz otworzyć tę nową kartę, bez zmiany plików konfiguracyjnych lub instalowania nowych wtyczek, uruchom to:
pwd | pbcopy
Następnie ręcznie otwórz nową kartę Terminal (za pomocą ⌘T), a na nowej karcie:
cd "`pbpaste`"
Ostrzeżenie : spowoduje to zastąpienie zawartości schowka systemowego.
Alternatywna, dłuższa metoda, która nie zastępuje schowka:
pwd > $TMPDIR/wd
Otwórz nową kartę.
cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd
Jeśli chcesz, aby katalog zmieniał się automatycznie po otwarciu nowej karty, użyj wtyczki dirpersist .
Wtyczka osx zapisuje tylko ostatni katalog, ale musisz uruchomić polecenie, tab
aby otworzyć nową kartę, co nie zawsze jest możliwe (jeśli, powiedzmy, uruchamiasz coś na bieżącej karcie).
Dodanie terminalapp do .zshrc nie działało dla mnie, więc szukałem wtyczki ~/.oh-my-zsh/plugins/terminalapp
i mówi mi:
# 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.