Geçerli dizinde tmux'ta yeni bir pencere nasıl oluşturulur?


208

new-windowŞu an içinde bulunduğum dizine ayarlanmış bir çalışma diziniyle açmak mümkündür . Önemli ise, zsh kullanıyorum .

Yanıtlar:


139

Başlayarak tmux 1,9 default-pathKullanmak gerek nedenle, opsiyon kaldırıldı -cile seçeneği new-windowve split-window(yeniden bağlama örneğin c, "ve %bağlamaları içerecek şekilde
-c '#{pane_current_path}'). Ayrıntılar için bu sorunun diğer cevaplarına bakın.


İlgili bir özellik, Şubat 2012'nin başlarında tmux SVN bagajına düştü . Bu kodu içeren tmux sürümlerinde, çağıran tmux anahtar bağlantıları new-window, geçerli bölmenin etkin işlemleriyle aynı default-pathoturum diziniyle ( oturum sürece) yeni bir pencere oluşturacak seçenek boştur, varsayılan olarak). split-windowAynısı, bir bağlayıcı aracılığıyla çağrıldığında komut tarafından oluşturulan bölmede de geçerlidir .

Bu, platforma özgü özel kodlar kullanır, bu nedenle şu anda yalnızca belirli işletim sistemleri desteklenir: Darwin (OS X), FreeBSD, Linux, OpenBSD ve Solaris.

Bu, bir sonraki tmux sürümünde mevcut olmalıdır (1.7?).


Tmux 1.4 ile genellikle kullanıyorum

tmux neww

Zaten istenen mevcut çalışma dizini olan bir kabukta.

Bununla birlikte, aynı geçerli çalışma dizinine sahip birçok pencere oluşturmak istediğimi (veya bunları normal <prefix> canahtar ciltlemeyle başlatabilmek istiyorum) beklediğimde default-pathoturum seçeneğini şu şekilde ayarlıyorum:

tmux set-option default-path "$PWD"

Zaten istenen geçerli çalışma dizinine sahip bir kabukta (açıkça herhangi bir dizinden yapıp, sadece değerini belirtebilseniz de).

Eğer default-pathboş olmayan bir değere ayarlanır, değeri yerine komut satırı çağırmaları gelen “miras” geçerli çalışma dizini kullanılacaktır tmux neww.

Tmux SSS başlıklı bir girdi olan başka bir yaklaşım anlatılmaktadır “Ben geçerli pencere ile aynı dizinde yeni bir pencere açmak nasıl?”; biraz sarsılmış olsa da.


6
<prefix>cAltta yatan kabuk örneğinin (varsa) çalışma dizinini okumak ve default-pathyürütmeden önce ayarlamak için eşleştirebileceğim bir yol var mı new-window? Yoksa bu bir istemek çok tmux :)
Shrikant Sharat

Başka bir notta, altta yatan kabuğun çalışma dizinini okumak bile mümkün mü? Durum çubuğumda gösterilmesi için öldürürüm.
Shrikant Sharat

2
Başka bir işlemin cwd'sini çıkarmanın taşınabilir bir yolu yoktur (bazı platformlarda (örneğin /proc/PID/cwdLinux'ta) mümkün olsa da ). Olası kısmi bir çözüm yoktur bir giriş bölgesinin tmux SSS (bu, kabuk kaydı bir istemi yazdırabilir CWD sahip sonra kaydedilen dizinde yeni bir kabuk başlatan bir anahtar olarak bağlanır).
Chris Johnsen

Tamam, bu benim bilgim için biraz kapsam dışında ve çok güvenilir hissetmiyorum. Bir şey bana, bütün bunlar olmadan daha iyi olabileceğimi söylüyor. Yine de teşekkürler.
Shrikant Sharat

1
@paradroid: Bağlama yoluyla yapılan herhangi bir şey (varsayılan olarak) tmux sunucusunun cwd değerini veya default-path(eğer ayarlanmışsa) oturum seçeneğinin değerini kullanır . Tmux SSS geçerli pencerede kabuk çalışan CWD'sindeki ile yeni bir pencere başlatan bir anahtar bağlamak için bir yol açıklayan bir giriş içerir ( “Ben geçerli pencere ile aynı dizinde yeni bir pencere açmak nasıl?”) , ancak yöntem oldukça karmaşık. Aynı muhtemelen split-windowve new-session(yerine neww) için yapılabilir .
Chris Johnsen

268

Geçerli (1.9a) Tmux kılavuz sayfası -c start-directory, new-windowve dahil bazı komutlar için isteğe bağlı bir parametre listeler split-window. Aynı zamanda pane_current_pathifade eden format değişkenini de içerir Current path if available.

Bunları birleştirerek
new-window -c "#{pane_current_path}"
, mevcut yolun boşluk içermesi durumunda, tırnak içine alınması gereken geçerli çalışma dizini ile yeni bir pencere açabiliriz .

Geçerli bölmeyi dikey olarak bölmek istiyorsanız
split-window -c "#{pane_current_path}"
, yatay bölme için veya düğmesini kullanın.
split-window -h -c "#{pane_current_path}"

Anahtar bağlantılarının geçerli çalışma diziniyle yeni bölmeler ve pencereleri varsayılan olarak açmasını sağlamak için, aşağıdakini ekleyin .tmux.conf. "Çevre tırnak bir dize başlamak ziyade bağlamak olmamalı tmux söylemektir "anahtarı.

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

1
Bu, tmux 1.9'da çalışmıyor mu? Beklenen şeyi yapmasını sağlayamıyorum.
Erik Garrison

1
bind-key -r Yeni pencere girin -c "# {pane_current_path}", tmux 2.1 için çalışıyor
Marslo

5
OSX üzerinde tmux 2.3'te çalışır. Uygulanan bu bağları görmek için mevcut tüm oturumları durdurmayı / öldürmeyi unutmayın.
jmgarnier

1
@jmgarnier veya profili tekrar kaynaklayın: prefix- :, sonra yazınsource ~/.tmux.conf
ijoseph

8
@jmgarnier ya da sadece tmux source-file .tmux.conf.
Blauhirn

37

Evet, kullan new-window -c "#{pane_current_path}". ~/.tmux.confKalıcı hale getirmek için aşağıdakini ekleyebilirsiniz (varsayılan tuş bağlamalarını varsayarak):

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

default-pathYol ayarı yapıldı kaldırıldı kullanarak o işlemek mesajında önerilen memba kodu ve tmux yazarın -c "#{pane_current_path}"veya -c "$PWDiçinde new-windowve split-windowkomutlar.

Ayrıca bu yinelenen soruya cevap verdim .


10

Tmux'un son sürümleriyle (v1.8, ancak belki de v1.7):

tmux new-window -c "$PWD"

Bu da split-window ile çalışıyor gibi tmux split-window -v -c "$PWD"
gözüküyor

3
$PWDtmux 1.9a'da benim için işe görünmüyor. pane_current_pathYukarıda önerildiği gibi kullanmak zorunda kaldım .
jordelver

3

Diğer cevaplar benim için işe yaramazsa onları bağlayıcı olarak koymaya çalıştığımda (özellikle tmux split-window -c). Ancak, bir yıldan uzun süredir hem yeni pencere hem de bölmeler için çalışan kendi çözümümü oluşturdum:

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

En azından $ (tmux -V) 1.8 ile çalışır. Şov ortamı komutuna sahip olmayan eski smokinlerde çalışan sürüm için buradaki yorumlu satırlara bakın .


0

tmux, 1.8 sürümünde yaptı ancak 1.9'da bu özellik -cbayrak kullanımı lehine kaldırıldı .

Bu çözüldü ancak yeniden bağlayıcı olabilir new-windowancak durumda bunu çok ağız olur başka bir şey çalıştırmak istiyorum: yerine yazarak neww man tmuxyazdığınız gerekecek neww -c "#{pane_current_path}" man tmuxhangi büyük olasılıkla yapmak istemiyoruz.

Takma ad kullanmaya izin vermek, 'mode' modunda birden çok komut bağlamak, değişkenler, döngüler, vb. İçin tmux'a uygun bir betik dili eklemek için bir tmux modu var (ben yazarım). : geçerli dizinde yeni pencereler ve pencereler açılır.

Buradaki kaynaklardan inşa edilebilir: http://ershov.github.io/tmux/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.