Apakah mungkin untuk membuka new-window
dengan direktori kerjanya diatur ke yang saya saat ini masuk. Saya menggunakan zsh , jika itu penting.
Apakah mungkin untuk membuka new-window
dengan direktori kerjanya diatur ke yang saya saat ini masuk. Saya menggunakan zsh , jika itu penting.
Jawaban:
Mulai di tmux 1.9 default-path
opsi telah dihapus, sehingga Anda perlu menggunakan -c
pilihan dengan new-window
, dan split-window
(misalnya dengan rebinding c
, "
dan %
binding untuk memasukkan
-c '#{pane_current_path}'
). Lihat beberapa jawaban lain untuk pertanyaan ini untuk perincian.
Fitur yang relevan mendarat di tmux SVN trunk pada awal Februari 2012. Dalam tmux build yang menyertakan kode ini, binding kunci tmux yang dipanggil new-window
akan membuat jendela baru dengan direktori kerja saat ini yang sama dengan proses aktif panel saat ini (selama default-path
sesi opsi 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 tmux berikutnya (1,7?).
Dengan tmux 1.4, saya biasanya hanya menggunakan
tmux neww
dalam sebuah 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 c
penjilidan kunci <prefix> yang biasa ), maka saya mengatur default-path
opsi sesi melalui
tmux set-option default-path "$PWD"
di shell yang sudah memiliki direktori kerja saat ini yang diinginkan (meskipun Anda jelas bisa melakukannya dari direktori mana saja dan cukup tentukan nilainya).
Jika default-path
diatur ke nilai non-kosong, nilainya akan digunakan alih-alih "mewarisi" direktori kerja saat ini dari permintaan baris perintah tmux neww
.
The tmux FAQ memiliki sebuah entri berjudul “Bagaimana saya bisa membuka jendela baru di direktori yang sama sebagai jendela saat ini?” Yang menggambarkan pendekatan lain; itu agak berbelit-belit.
/proc/PID/cwd
di Linux)). Ada solusi parsial yang mungkin dalam entri dari FAQ tmux (ia memiliki catatan shell cwd ketika mencetak prompt, kemudian mengikat kunci yang memulai shell baru di direktori yang direkam).
default-path
opsi sesi (jika itu diatur). The tmux FAQ memiliki entri yang menggambarkan cara untuk mengikat kunci yang dimulai jendela baru dengan cwd dari shell berjalan di jendela ( “Bagaimana saya bisa membuka jendela baru di direktori yang sama sebagai jendela saat ini?”) , tetapi metode ini cukup berbelit-belit. Hal yang sama mungkin bisa dilakukan untuk split-window
dan new-session
(bukan neww
).
Halaman manual Tmux saat ini (1.9a) mencantumkan -c start-directory
parameter opsional untuk beberapa perintah, termasuk new-window
dan split-window
. Ini juga berisi variabel format pane_current_path
, yang merujuk ke
Current path if available
.
Dengan menggabungkan ini, kita dapat membuka jendela baru dengan direktori kerja saat ini menggunakan
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 baru dan jendela dengan direktori kerja saat ini secara default, tambahkan berikut ini ke .tmux.conf
. Tanda "
kutip di sekelilingnya adalah untuk memberi tahu Tmux bahwa itu tidak seharusnya memulai sebuah string melainkan mengikat "kunci.
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
prefix
- :
, lalu ketiksource ~/.tmux.conf
tmux source-file .tmux.conf
.
Ya, gunakan new-window -c "#{pane_current_path}"
. Anda dapat menambahkan yang berikut ini ke Anda ~/.tmux.conf
untuk membuatnya tetap (dengan asumsi keybindings default):
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
The default-path
pengaturan jalur itu dihapus dari kode hulu dan penulis tmux direkomendasikan dalam pesan komit baik menggunakan -c "#{pane_current_path}"
atau -c "$PWD
dalam new-window
dan split-window
perintah.
Saya juga menjawab dalam pertanyaan rangkap ini .
Dengan versi terbaru tmux (v1.8, tapi mungkin juga di v1.7):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
$PWD
tampaknya tidak berfungsi untuk saya di tmux 1.9a. Saya harus menggunakan pane_current_path
seperti yang disarankan di atas.
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 komentar di sini untuk versi yang berfungsi untuk tuxedo lama yang tidak memiliki perintah show-environment.
tmux melakukan itu dalam versi 1.8 tetapi pada 1.9 fitur ini dihapus karena menggunakan -c
flag.
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 paling tidak ingin Anda lakukan.
Ada mod tmux (saya penulis) untuk menambahkan bahasa scripting yang tepat ke 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.
Dapat dibangun dari sumber di sini: http://ershov.github.io/tmux/
<prefix>c
untuk membaca direktori kerja instance shell yang mendasarinya (jika ada) dan mengaturdefault-path
sebelum dieksekusinew-window
. Atau terlalu banyak bertanya tentang tmux :)