Tmux lupa direktori tempat sesi itu dibuat

8

Ketika saya membuat beberapa sesi di tmux, direktori saat ini untuk setiap jendela baru di sesi berikutnya ditetapkan sebagai direktori saat ini untuk yang pertama.

Sebagai contoh:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

Bagaimana saya bisa memaksa tmux untuk menetapkan direktori saat ini untuk setiap jendela baru di sesi berikutnya sebagai direktori tempat sesi itu dibuat?

tmux 1.6

zsh 4.3

Shamaoke
sumber

Jawaban:

21

Pada tmux 1.9 opsi jalur default telah dihapus .

Anda dapat menggunakan yang berikut ini untuk membuka di direktori tempat sesi dibuka ('klien' dalam nama akan menunjukkan kepada saya bahwa itu adalah tmux runnin saat ini di shell Anda, tetapi tampaknya untuk mengganti jalur ketika beralih di antara sesi di klien yang sama):

bind-key c  new-window -c "#{client_cwd}"

Kalau tidak, salin jalur panel saat ini:

bind-key c  new-window -c "#{pane_current_path}"

Ada juga pane_start_path yang mungkin menarik bagi beberapa alur kerja.

bind-key c  new-window -c "#{pane_start_path}"

Untuk perintah split window.

bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"
David C. Bishop
sumber
1
INI adalah jawaban yang benar. Khususnya opsi 2 dalam kasus saya.
Mike Rapadas
sebagai tambahan, jangan lupa untuk menutup semua terminal tmux yang berfungsi saat ini termasuk latar belakang sebelum menyalurkan file konfigurasi Anda jika tidak tmux tidak akan memuat konfigurasi baru.
randomness2077
@lightmanhk Anda seharusnya bisa hanya: source ~ / .tmux.conf
David C. Bishop
1
Adakah cara untuk menggeneralisasi ini untuk pemisahan panel? split-window -h "#{pane_current_path}"tidak akan bekerja ...
Bach
1
@Bach Coba dengan -c. split-window -h -c "#{pane_current_path}"
David C. Bishop
3

Saya menyadari bahwa pertanyaan ini cukup lama, tetapi muncul sebagai satu-satunya pertanyaan di StackExchange ketika saya mencari jawabannya sendiri, jadi di sini adalah bagaimana saya menyelesaikannya untuk tmux 1.8.

The new-windowperintah mengambil -cbendera yang akan memungkinkan Anda untuk menentukan direktori saat jendela baru. Secara default, ini adalah string kosong, yang akan menggunakan direktori kerja panel saat ini sebagai direktori untuk jendela baru. Melewati -sebagai nilai untuk -cbendera akan mengatur direktori jendela baru untuk apa sesi dibuka.

Berikut adalah kutipan dari dokumen:

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

Jika Anda ingin mengubah perilaku default dari <PREFIX> cpengikat tombol untuk mencerminkan hal ini, inilah yang saya lakukan di ~/.tmux.conf:

bind-key c   new-window -c -
nicklamuro
sumber
0

ada beberapa jawaban di sini: /unix/12032/create-new-window-with-current-directory-in-tmux

Singkatnya:

dari FAQ tmux, satu cara tumpul (tapi sangat umum dan cukup mandiri):

  • Bagaimana saya bisa membuka jendela baru di direktori yang sama dengan jendela saat ini?

Salah satu opsi adalah menjalankan "TMUX = tmux" di jendela. Namun, ini hanya berfungsi jika tidak ada perintah yang berjalan, sehingga Anda dapat memasukkan perintah.

Solusinya adalah membiarkan tmux tahu tentang jalur saat ini melalui variabel lingkungan. Untuk melakukannya, gunakan perintah berikut:

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

Yang menetapkan TMUXPWD_i (di mana saya adalah nomor dari jendela saat ini) ke jalur direktori saat ini. Perintah ini dapat ditambahkan ke PS1, misalnya:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

Ketika jendela baru dibuat, shell harus diminta untuk mengubah direktori. Anda dapat menentukan ikatan baru (misalnya, jika menggunakan GNU bash):

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

Solusi ini akan berfungsi bahkan jika perintah saat ini berjalan di terminal, tetapi itu tidak akan berfungsi dari jendela yang baru saja ditukar dengan yang lain karena TMUXPWD_i tidak akan diperbarui setelah swap. Namun, begitu prompt baru ditampilkan, TMUXPWD_i diperbarui dengan benar.

cukup ganti panggilan ke shell yang sesuai untuk Anda.

juga, versi tmux yang tampaknya lebih baru telah ditangani dengan perintah

tmux new-window

versi yang lebih lama diklaim berfungsi sebagai berikut:

panggilan

tmux neww

dari shell Anda akan membuka tmux di dir itu.

jika Anda ingin dapat membuka jendela atau panel baru dari direktori kerja saat ini di tmux maka Anda harus:

tmux set-option default-path "$ PWD"

anjing laut
sumber
Terima kasih telah mencoba membantu, walrus . Saya melihat pertanyaan itu di unix.stackexchange dan membaca FAQ. Namun, ini bukan jawaban untuk pertanyaan saya.
Shamaoke
1
Lihat, ketika Anda membuat sesi baru, direktori saat ini untuk setiap jendela atau panel baru yang Anda buka di sesi itu adalah direktori tempat Anda memulai sesi . Ini benar jika saya membuat satu sesi. Namun, ketika saya membuka jendela terminal baru dan memulai satu sesi lagi di dalamnya, direktori kerja saat ini untuk setiap jendela baru adalah direktori tempat saya memulai sesi pertama tetapi bukan yang sekarang. Ini rupanya bug di tmux 1.6 karena ketika saya menurunkannya ke versi 1.3 bug tidak muncul.
Shamaoke