Możliwe jest otwarcie new-window
z ustawionym katalogiem roboczym na ten, w którym aktualnie jestem. Używam zsh , jeśli to ma znaczenie.
Możliwe jest otwarcie new-window
z ustawionym katalogiem roboczym na ten, w którym aktualnie jestem. Używam zsh , jeśli to ma znaczenie.
Odpowiedzi:
Począwszy od tmux 1.9 default-path
opcja została usunięta, więc trzeba użyć -c
opcji z new-window
i split-window
(na przykład przez ponowna konsolidacja c
, "
oraz %
powiązania obejmuje
-c '#{pane_current_path}'
). Szczegółowe informacje można znaleźć w niektórych innych odpowiedziach na to pytanie.
Odpowiednia funkcja pojawiła się w pnia SVN tmux na początku lutego 2012 r. W kompilacjach tmux zawierających ten kod wywoływane powiązania klawiszy tmuxnew-window
utworzą nowe okno z tym samym bieżącym katalogiem roboczym, co aktywne procesy bieżącego panelu (tak długo, jak default-path
sesja opcja jest pusta; jest domyślnie). To samo dotyczy panelu utworzonego przez split-window
polecenie, gdy jest wywoływane przez powiązanie.
Korzysta ze specjalnego kodu specyficznego dla platformy, dlatego obecnie obsługiwane są tylko niektóre systemy operacyjne: Darwin (OS X), FreeBSD, Linux, OpenBSD i Solaris.
Powinno to być dostępne w następnej wersji tmux (1.7?).
Z tmux 1.4 zwykle po prostu używam
tmux neww
w powłoce, która ma już żądany bieżący katalog roboczy.
Jeśli jednak przewiduję potrzebę utworzenia wielu okien z tym samym bieżącym katalogiem roboczym (lub chcę móc je uruchomić za pomocą zwykłego c
powiązania klawiszy <prefix> ), wówczas ustawiam default-path
opcję sesji za pomocą
tmux set-option default-path "$PWD"
w powłoce, która ma już żądany bieżący katalog roboczy (chociaż można to oczywiście zrobić z dowolnego katalogu i po prostu podać wartość).
Jeśli default-path
jest ustawiona na niepustą wartość, jej wartość zostanie użyta zamiast „dziedziczenia” bieżącego katalogu roboczego z wywołań wiersza poleceń z tmux neww
.
Tmux FAQ posiada wpis zatytułowany „Jak mogę otworzyć nowe okno w tym samym katalogu co bieżącym oknie?”, Który opisuje kolejne podejście; jest to jednak trochę skomplikowane.
/proc/PID/cwd
Linux)). Jest możliwe rozwiązanie częściowe w wpisu na tmux FAQ (ma rekord powłoki jego cwd kiedy drukuje wiersz, a następnie wiąże klucz, który rozpoczyna nową powłokę w nagranej katalogu).
default-path
opcji sesji (jeśli jest ustawiona). Tmux FAQ posiada wpis opisujący sposób powiązać przycisk, który uruchamia nowe okno z CWD z uruchomionym Shell w bieżącym oknie ( „Jak mogę otworzyć nowe okno w tym samym katalogu co bieżącym oknie?”) , ale metoda jest dość skomplikowana. To samo prawdopodobnie można zrobić dla split-window
i new-session
(zamiast neww
).
Bieżąca strona podręcznika Tmux (1.9a) zawiera opcjonalny -c start-directory
parametr dla niektórych poleceń, w tym new-window
i split-window
. Zawiera także zmienną formatu pane_current_path
, która odnosi się do
Current path if available
.
Łącząc je, możemy otworzyć nowe okno z bieżącym katalogiem roboczym, używając
new-window -c "#{pane_current_path}"
cytatu, jeśli bieżąca ścieżka zawiera spacje.
Jeśli chcesz podzielić bieżący panel pionowo, użyj
split-window -c "#{pane_current_path}"
lub, aby podzielić poziomo
split-window -h -c "#{pane_current_path}"
Aby domyślne powiązania otwierały nowe podziały i okna z bieżącym katalogiem roboczym, dodaj następujące elementy do swojego .tmux.conf
. "
Z okolic cytatów jest powiedzieć tmux nie powinien rozpocząć ciąg lecz wiążą "klucz.
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
prefix
- :
, a następnie wpiszsource ~/.tmux.conf
tmux source-file .tmux.conf
.
Tak, użyj new-window -c "#{pane_current_path}"
. Możesz dodać następujące elementy, aby były ~/.tmux.conf
trwałe (przyjmując domyślne skróty klawiszowe):
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
default-path
Ustawienie ścieżka została usunięta z kodu przed i tmux autora zalecanych w tej wiadomości popełnienia pomocą jednej -c "#{pane_current_path}"
lub -c "$PWD
w new-window
i split-window
polecenia.
Odpowiedziałem również w tym zduplikowanym pytaniu .
W najnowszych wersjach tmux (v1.8, ale może także w v1.7):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
$PWD
nie wydaje się działać dla mnie w tmux 1.9a. Musiałem użyć pane_current_path
zgodnie z sugestią powyżej.
Inne odpowiedzi nie działają dla mnie, gdy próbuję umieścić je jako powiązania (konkretnie tmux split-window -c
). Ale stworzyłem własne rozwiązanie, którego używam od ponad roku, które działa zarówno dla nowego okna, jak i dla podziałów:
~/.bashrc
:
PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'
~/.tmux.conf
:
unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window
bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"
Działa przynajmniej z $ (tmux -V) 1.8. Zobacz nieskomentowane wiersze tutaj dla wersji działającej dla starszych tmux, które nie mają polecenia show-environment.
tmux zrobił to w wersji 1.8, ale w wersji 1.9 ta funkcja została usunięta na korzyść użycia -c
flagi.
Można to rozwiązać, ale ponownie powiązać, new-window
ale w przypadku, gdy chcesz uruchomić coś innego, staje się to zbyt trudne: zamiast pisać neww man tmux
będziesz musiał pisać, neww -c "#{pane_current_path}" man tmux
czego najprawdopodobniej nie chcesz.
Istnieje mod tmux (jestem autorem), aby dodać odpowiedni język skryptowy do tmux, aby umożliwić używanie aliasów, wiązanie wielu poleceń w „trybie”, zmiennych, pętli itp. A także przywraca to zachowanie : nowe okna i panele są otwierane w bieżącym katalogu.
Można go zbudować ze źródeł tutaj: http://ershov.github.io/tmux/
<prefix>c
aby odczytać katalog roboczy bazowej instancji powłoki (jeśli istnieje) i ustawićdefault-path
przed uruchomieniemnew-window
. A może to zbyt wiele, by prosić o tmux :)