it-swarm-id.com

Bagaimana cara membuat jendela baru pada direktori saat ini di tmux?

Apakah mungkin untuk membuka new-window dengan direktori kerjanya diatur ke direktori yang saya gunakan saat ini. Saya menggunakan zsh, jika itu penting.

217
Shrikant Sharat

Mulai dari tmux 1.9 the default-path opsi telah dihapus, jadi Anda perlu menggunakan -c opsi dengan new-window, dan split-window (mis. dengan memutarkan c, ", dan % binding untuk disertakan
-c '#{pane_current_path}'). Lihat beberapa jawaban lain untuk pertanyaan ini untuk perincian.


Fitur yang relevan mendarat di tmux trunk SVN pada awal Februari 2012. Di tmux build yang menyertakan kode ini, tmux binding kunci yang memanggil new-window akan membuat jendela baru dengan direktori kerja saat ini yang sama dengan proses aktif panel saat ini (selama default-path opsi sesi kosong; ini secara default). Hal yang sama berlaku untuk panel yang dibuat oleh split-window perintah ketika dipanggil melalui pengikatan.

Ini menggunakan kode khusus platform khusus, jadi hanya OS tertentu yang didukung saat ini: Darwin (OS X), FreeBSD, Linux, OpenBSD, dan Solaris.

Ini harus tersedia dalam rilis berikutnya tmux (1,7?).


Dengan tmux 1.4, saya biasanya hanya menggunakan

tmux neww

di Shell yang sudah memiliki direktori kerja saat ini yang diinginkan.

Namun, jika saya mengantisipasi perlu membuat banyak jendela dengan direktori kerja saat ini yang sama (atau saya ingin dapat memulainya dengan <prefix> c key binding) seperti biasa, maka saya mengatur default-path opsi sesi via

tmux set-option default-path "$PWD"

di Shell yang sudah memiliki direktori kerja saat ini yang diinginkan (meskipun Anda jelas bisa melakukannya dari direktori apa pun dan cukup tentukan nilainya).

Jika default-path diatur ke nilai yang tidak kosong, nilainya akan digunakan alih-alih “mewarisi” direktori kerja saat ini dari permintaan baris perintah tmux neww.

The tmux FAQ memiliki entri berjudul "Bagaimana saya bisa membuka jendela baru di direktori yang sama dengan jendela saat ini?" yang menggambarkan pendekatan lain; itu agak berbelit-belit.

150
Chris Johnsen

Halaman manual Tmux saat ini (1.9a) mencantumkan parameter -c start-directory Opsional untuk beberapa perintah, termasuk new-window Dan split-window. Itu juga berisi variabel format pane_current_path, Yang merujuk pada Current path if available.

Dengan menggabungkan ini, kita dapat membuka jendela baru dengan menggunakan direktori kerja saat ini
new-window -c "#{pane_current_path}"
Kutipan diperlukan jika jalur saat ini berisi spasi.

Jika Anda ingin membagi panel saat ini secara vertikal, gunakan
split-window -c "#{pane_current_path}"
atau, untuk pemisahan horizontal
split-window -h -c "#{pane_current_path}"

Untuk membuat binding kunci membuka pemisahan dan jendela baru dengan direktori kerja saat ini secara default, tambahkan berikut ini ke .tmux.conf Anda. The " Dengan tanda kutip yang mengelilinginya adalah untuk memberitahu Tmux itu tidak seharusnya memulai sebuah string melainkan mengikatnya " kunci.

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

Ya, gunakan new-window -c "#{pane_current_path}". Anda dapat menambahkan yang berikut ke ~/.tmux.conf Anda untuk membuatnya tetap ada (dengan asumsi ikatan kunci default):

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

Pengaturan path default-path Adalah dihapus dari kode hulu dan penulis tmux yang direkomendasikan dalam pesan komit menggunakan -c "#{pane_current_path}" Atau -c "$PWD Di new-window dan split-window perintah.

Saya juga menjawab ini pertanyaan rangkap .

43
mmoya

Dengan versi terbaru tmux (v1.8, tapi mungkin juga di v1.7):

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

Jawaban lain tidak berfungsi untuk saya ketika saya mencoba meletakkannya sebagai binding (khusus tmux split-window -c). Tetapi saya telah membuat solusi saya sendiri yang telah saya gunakan selama lebih dari setahun yang bekerja baik untuk jendela baru dan pemisahan:

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

Paling tidak berfungsi dengan $ (tmux -V) 1.8. Lihat baris keluar-komentar di sini untuk versi yang berfungsi untuk tmux lama yang tidak memiliki perintah show-environment.

3
Erik Westrup

tmux melakukannya di versi 1.8 tetapi di 1.9 fitur ini dihapus karena menggunakan -c bendera.

Ini bisa diselesaikan tetapi mengikat kembali new-window tetapi jika Anda ingin menjalankan sesuatu yang lain itu menjadi terlalu bertele-tele: alih-alih mengetik neww man tmux Anda harus mengetik neww -c "#{pane_current_path}" man tmux yang kemungkinan besar tidak ingin Anda lakukan.

Ada mod tmux (saya penulis) untuk menambahkan bahasa scripting yang tepat untuk tmux untuk memungkinkan menggunakan alias, mengikat beberapa perintah dalam 'mode', variabel, loop, dll ... Dan juga, itu mengembalikan perilaku itu : jendela dan panel baru dibuka di direktori saat ini.

Itu dapat dibangun dari sumber di sini: http://ershov.github.io/tmux/

0
Yuriy Ershov