it-swarm-eu.dev

Jak vytvořit nové okno v aktuálním adresáři v tmuxu?

Je možné otevřít new-window s jeho pracovním adresářem nastaveným na ten, ve kterém se právě nacházím. Používám zsh, pokud je to důležité.

217
Shrikant Sharat

Počínaje tmux 1.9 byla odebrána možnost default-path, Takže musíte použít možnost -c S new-window A split-window (Např. Navázáním vazeb c, " A % Za účelem zahrnutí
-c '#{pane_current_path}'). Podrobnosti najdete v dalších odpovědích na tuto otázku.


Na začátku února 2012 byl do kmene SVN tmux vložen relevantní prvek. V sestavy tmux , které obsahují tento kód, Vazby kláves tmux , které vyvolávají new-window, vytvoří nové okno se stejným aktuálním pracovním adresářem jako aktivní procesy aktuálního podokna (pokud je možnost relace default-path prázdný; ve výchozím nastavení je). Totéž platí pro podokno vytvořené příkazem split-window, Když je vyvoláno prostřednictvím vazby.

Používá se speciální kód pro konkrétní platformu, takže jsou v současné době podporovány pouze některé operační systémy: Darwin (OS X), FreeBSD, Linux, OpenBSD a Solaris.

To by mělo být k dispozici v příštím vydání tmux (1,7?).


S tmux 1,4 obvykle používám

tmux neww

v prostředí, které již má požadovaný aktuální pracovní adresář.

Pokud však předpokládám, že budu potřebovat vytvořit mnoho oken se stejným aktuálním pracovním adresářem (nebo chci, abych je mohl spustit pomocí obvyklé vazby klávesy <prefix> c), pak jsem nastavil default-path Možnost relace přes

tmux set-option default-path "$PWD"

v prostředí, které již má požadovaný aktuální pracovní adresář (i když to samozřejmě můžete udělat z libovolného adresáře a místo toho pouze zadat hodnotu).

Pokud je default-path Nastavena na neprázdnou hodnotu, použije se její hodnota místo „zdědění“ aktuálního pracovního adresáře z vyvolání příkazového řádku tmux neww.

tmux FAQ obsahuje záznam s názvem „Jak mohu otevřít nové okno ve stejném adresáři jako aktuální okno?“ který popisuje jiný přístup; je to ale trochu spletité.

150
Chris Johnsen

Aktuální (1,9a) manuální stránka Tmux obsahuje volitelný parametr -c start-directory Pro některé příkazy, včetně new-window A split-window. Obsahuje také formátovou proměnnou pane_current_path, Která odkazuje na Current path if available.

Jejich kombinací můžeme otevřít nové okno s použitím aktuálního pracovního adresáře
new-window -c "#{pane_current_path}"
Nabídka je nutná v případě, že aktuální cesta obsahuje mezery.

Pokud chcete rozdělit aktuální podokno svisle, použijte
split-window -c "#{pane_current_path}"
nebo pro horizontální rozdělení
split-window -h -c "#{pane_current_path}"

Chcete-li, aby vazby klíčů ve výchozím nastavení otevíraly nové mezery a okna s aktuálním pracovním adresářem, přidejte do svého .tmux.conf Následující. " S uvozovkami má říct Tmuxovi, že by neměl začínat řetězcem, ale spoutat " klíč.

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
293
Simon Kohlmeyer

Ano, použijte new-window -c "#{pane_current_path}". K ~/.tmux.conf Můžete přidat následující, aby byl trvalý (za předpokladu výchozího keybindings):

bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

Nastavení cesty default-path Bylo odstraněno z upstream kódu a autor tmux doporučený v této potvrzovací zprávě pomocí -c "#{pane_current_path}" Nebo -c "$PWD V new-window a split-window.

Také jsem odpověděl v této duplicitní otázka .

43
mmoya

S nejnovějšími verzemi tmux (v1.8, ale možná i ve v1.7):

tmux new-window -c "$PWD"
10
mislav

Ostatní odpovědi pro mě nefungují, když je zkusím dát jako vazby (konkrétně tmux split-window -c). Ale vytvořil jsem si vlastní řešení, které používám déle než rok, který funguje jak pro nové okno, tak pro rozdělení:

~/.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"

Funguje přinejmenším s $ (tmux -V) 1.8. Podívejte se na řádky mimo komentář zde pro verzi fungující pro starší tmuxy, které nemají příkaz show-environment.

3
Erik Westrup

tmux to udělal ve verzi 1.8, ale v 1.9 byla tato funkce odstraněna ve prospěch použití příznaku -c.

To lze vyřešit, ale znovu zavázat new-window, Ale v případě, že chcete spustit něco jiného, ​​je to příliš hrozné: namísto psaní neww man tmux Budete muset zadat neww -c "#{pane_current_path}" man tmux, Který nejspíš nechcete dělat.

Existuje tmux (jsem autor), který do tmuxu přidává správný skriptovací jazyk, který umožňuje používat aliasy, vázat více příkazů v 'režimu', proměnné, smyčky atd. A také to chování vrací : nová okna a okna se otevřou v aktuálním adresáři.

Lze jej sestavit ze zdrojů zde: http://ershov.github.io/tmux/

0
Yuriy Ershov