Możliwe jest otwarcie new-windowz ustawionym katalogiem roboczym na ten, w którym aktualnie jestem. Używam zsh , jeśli to ma znaczenie.
Możliwe jest otwarcie new-windowz 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-pathopcja została usunięta, więc trzeba użyć -copcji z new-windowi 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-pathsesja opcja jest pusta; jest domyślnie). To samo dotyczy panelu utworzonego przez split-windowpolecenie, 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 cpowiązania klawiszy <prefix> ), wówczas ustawiam default-pathopcję 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-pathjest 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/cwdLinux)). 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-pathopcji 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-windowi new-session(zamiast neww).
Bieżąca strona podręcznika Tmux (1.9a) zawiera opcjonalny -c start-directoryparametr dla niektórych poleceń, w tym new-windowi 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.conftrwał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-pathUstawienie ś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 "$PWDw new-windowi split-windowpolecenia.
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"
$PWDnie wydaje się działać dla mnie w tmux 1.9a. Musiałem użyć pane_current_pathzgodnie 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 -cflagi.
Można to rozwiązać, ale ponownie powiązać, new-windowale w przypadku, gdy chcesz uruchomić coś innego, staje się to zbyt trudne: zamiast pisać neww man tmuxbędziesz musiał pisać, neww -c "#{pane_current_path}" man tmuxczego 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>caby odczytać katalog roboczy bazowej instancji powłoki (jeśli istnieje) i ustawićdefault-pathprzed uruchomieniemnew-window. A może to zbyt wiele, by prosić o tmux :)