Saya suka memanggil :clear-history
panel dengan scrollback besar. Namun, saya ingin menulis cara untuk mengirim perintah ini ke semua panel di berbagai jendela.
Saya tahu cara mengirim perintah ke semua jendela, berkat pertanyaan ini , tetapi bagaimana cara mengirim perintah ke semua panel di jendela mana juga?
send-keys
dan synchronize-panes
dari manual tmux muncul di pikiran, tapi aku tidak yakin bagaimana menikahi mereka bersama. Tapi mungkin ada cara sederhana untuk melakukan ini.
Pengamatan Ekstra:
Memikirkan hal ini sedikit, tmux list-panes -a
sepertinya mencantumkan semua panel di sesi saat ini. Cukup berguna untuk memulai. Kemana saya harus pergi dari sini?
Jawaban:
Sudahkah Anda mencoba mengikuti di jendela tmux dengan banyak panel
sumber
Ctrl-b :setw synchronize-panes off
~/.tmux.conf
dengan menambahkan:bind -n C-x setw synchronize-panes on
danbind -n M-x setw synchronize-panes off
on/off
. Jadibind -n C-x setw synchronize-panes
bind -n C-x setw synchronize-panes
jalan pintas apa yang harus saya tekan untuk memohon? Apakah ini awalan + C & x. Saya mencoba banyak opsiAgak terlambat ke pesta tetapi saya tidak ingin mengatur dan menghapus set-sinkronisasi hanya untuk mengirim satu perintah jadi saya membuat fungsi pembungkus di sekitar tmux dan menambahkan fungsi kustom yang disebut
send-keys-all-panes
.Saya juga membuat wrapper di sekitar perintah tmux untuk mempermudah memanggil fungsi ini (untuk kenyamanan). Wrapper dan kode di atas semuanya ada di sini .
Ini memungkinkan saya untuk menjalankan
tmux send-keys-all-panes <command>
atautmux skap <command
mengirim<command>
ke semua panel.Perhatikan bahwa tmux alias fungsi pembungkus saya tmux_pp.
sumber
prefix + :
<prefix>:
?: run "yourscript.sh yourargs..."
); jika perintah Anda menghasilkan panel Anda yang aktif atau yang ditentukan akan menampilkan hasilnya sampai Anda menekan q, tetapi dalam kasus ini seharusnya tidak. Tentu saja Anda dapat alias / mengikat ini sesuai dengan keinginan Anda. Selain itu, proses internal dapat menginterpretasikan penekanan tombol atau efeknya secara berbeda, sehingga daftar putih atau daftar hitam#{pane_current_cmd}
mungkin diperlukan. Saya memiliki ctrl + k terikat untuk mengirim ctrl + l dan menghapus riwayat; ini berfungsi dengan baik untuk kerang, tetapi penyangga climbers Vim. Saya perlu perbaikan sebelum saya bisa menyiarkan ctrl + k saya.<prefix>:
sebelum setiap perintah, kehilangan output setelah meninggalkan perintah, dan semua jebakan yang datang dengan mengeksekusi melalui Tmux. Sebagai contoh,<prefix>:run "man cat"
tidak menghasilkan pria munculpidof man
atau bahkanps auxf | grep man
, atau 'kurang', pager saya saat ini untuk pria.Perbarui Juni 2019
Ilustrasi cepat tentang cara mengonfigurasi ikatan Anda sendiri untuk panel sinkronisasi .
Menambahkan yang berikut ke dalam saya
tmux.conf
(komentar tentu berlaku untuk konfigurasi saya secara keseluruhan):Sekarang, saya dapat mengaktifkan kemampuan untuk menyinkronkan perintah di beberapa panel dengan
<C-a><C-y>
.(Ya, saya memetakan kembali kunci ikat ke Ctrl a).
sumber
Tidak ada jawaban di atas yang berfungsi untuk saya (tmux v2.3), tetapi ini berhasil, dari baris perintah bash:
Skrip yang lebih umum, untuk perintah tmux selain dari 'clear-history' hanya akan mengganti elemen itu dengan parameter, misalnya. $ 1. Berhati-hatilah jika Anda bermaksud menulis skrip untuk menangani serangkaian perintah tmux, karena "-t $ {_ pane}" perlu diterapkan untuk masing-masingnya.
Perhatikan bahwa
-a
parameter untuktmux list-panes
diperlukan untuk mencakup semua panel di semua jendela di semua sesi. Tanpa itu, hanya panel di jendela tmux Anda saat ini yang akan terpengaruh. Jika Anda memiliki lebih dari satu sesi tmux terbuka dan hanya ingin menerapkan perintah ke panel dalam sesi saat ini, ganti-a
dengan-s
(Semuanya ada di halaman manual tmux).Saya tidak memiliki mod poin untuk mengomentari langsung setiap jawaban di atas, jadi inilah mengapa mereka tidak bekerja untuk saya:
Masalah yang saya miliki dengan jawaban @ shailesh-garg adalah bahwa sinkronisasi hanya mempengaruhi perintah yang dikeluarkan dalam panel, bukan perintah tmux yang dikeluarkan menggunakan
Ctrl-B :
yang berada di luar panel.Tiga masalah yang saya miliki dengan jawaban @kshenoy adalah:
sumber
versi tmux saya adalah 1.9a, dan ini berfungsi untuk saya, satu kunci sudah cukup baik untuk hidup dan mati
sumber
Ganti "id sesi" dan "perintah" sesuai.
sumber
:D
Bung Anda perlu menambahkan beberapa deskripsi untuk jawaban Anda karena memiliki teks yang sangat minim dan untuk alasan itu Stackoverflow mendeteksinya sebagai spam atau posting berkualitas rendah hanya menambahkan beberapa detail untuk itu sehingga tidak muncul di bawahnya.Ini adalah fungsi utilitas saya untuk melakukannya, hanya menjalankan perintah ketika tidak ada yang berjalan di panel.
Contoh menargetkan sesi yang disebut dev, mengaktifkan python virtualenv di semua panel yang ada di
bash
atauzsh
, menghindari mengeksekusi perintah di panel dengan vim atau yang dapat dieksekusi lainnya:atau lebih mudah diingat: untuk melakukannya di sesi saat ini:
Temukan file konfigurasi saya dengan fungsi ini.
sumber