Saya telah bereksperimen dengan pengaturan tmux keybinding yang berbeda dan saya perhatikan hal berikut:
Jika saya memuat ulang konfigurasi tmux saya (dari dalam tmux) keybindings yang pernah saya muat akan tetap dimuat. Satu-satunya cara (saya tahu) untuk membersihkan ini adalah untuk keluar dari semua sesi tmux dan restart. Jadi sepertinya tmux mengingat semua keybindings yang dimuat sebelumnya dan hanya akan menghapusnya pada awal yang baru atau dengan secara eksplisit melepas ikatannya.
Untuk membuat ulang ini:
- buka terminal (A)
- mulai tmux
- periksa apakah ikatan tombol menunjukkan jam (tekan
PREFIX C-t
) - tekan
PREFIX ?
untuk melihat pengikat tombol dalam daftar - sunting
~/.tmux.conf
- tambahkan pengikat kunci (
bind C-t display "Keybinding C-t"
) - reload tmux config (
PREFIX : source-file ~/.tmux.conf
) - periksa apakah pengikatan tombol berfungsi (tekan
PREFIX C-t
) - tekan
PREFIX ?
untuk melihat pengikat kunci baru dalam daftar - edit
~/.tmux.conf
lagi - menghapus keybinding (jadi hapus
bind C-t display "Keybinding C-t"
) - reload tmux config (
PREFIX : source-file ~/.tmux.conf
) - periksa apakah keybinding berfungsi (tekan
PREFIX C-t
), masih menampilkan "Keybinding Ct" - tekan
PREFIX ?
untuk melihat bahwa pengikat kunci baru masih ada dalam daftar - keluar dari tmux
- masukkan tmux
- periksa apakah pengikatan kunci yang asli berfungsi lagi (tekan
PREFIX C-t
), sekarang ia akan menampilkan jam lagi - tekan
PREFIX ?
untuk melihat bahwa penjilidan kunci baru telah dihapus dari daftar
Pertanyaan saya: apakah ada cara untuk memerintahkan tmux untuk "melupakan" semua konfigurasi yang dimuat lalu memuat .tmux.conf
?
sumber
unbind-key -a
menghapus semua keybindings. Saya akan menandai jawaban Anda sebagai benar, tetapi demi pemirsa lain, saya juga akan menambahkan "retasan" yang telah saya terapkan untuk memperbaiki masalahunbind-key -a
.Solusi yang benar (oleh Peter
Jadi @peterph memberikan jawaban yang benar yaitu
unbind-key -a
yang melakukan hal berikut: (man tmux)Solusi yang bisa diterapkan
Masalahnya (bagi saya) adalah bahwa "semua" sebenarnya berarti semua. Termasuk tmux keybindings hadir . Jika Anda menjalankan
unbind-key -a
perintah tmux secara instan tidak memiliki ikatan kunci sama sekali lagi sehingga Anda bahkan tidak bisa masuk ke mode perintah atau melakukan apa pun pada dasarnya.Perbaikan saya (agak jelek) untuk ini adalah sebagai berikut:
.tmux.reset.conf
yang menghapus semua keybindings dan kemudian rebind semua yang tmux miliki secara default.tmux.conf
Saya
.tmux.conf
:Saya
.tmux.reset.conf
:Sepertinya ini bisa bekerja dengan tmux key-tables (sejauh yang saya tahu) tetapi Anda tidak bisa menambahkan key-tables baru.
sumber
.tmux.reset.conf
dengan Anda dengan menjalankantmux list-keys
sesi "bersih".tmux -f /dev/null -L temp start-server \; list-keys
akan secara efektif menghasilkan default (meskipun Anda perlu menambahkan backslash sebelum titik koma dalam pengikatannya).Saat ini tidak ada cara langsung untuk mengatur ulang ikatan kunci ke standarnya; inisialisasi binding standar (dalam
key_bindings_init()
) dilakukan sekali ketika server tmux pertama kali dimulai (dalamserver_start()
), dan tidak ada mekanisme untuk mengatur ulang satu kunci.Untuk skenario yang Anda inginkan di mana Anda ingin tindakan sumber file konfigurasi Anda untuk membangun kembali default mengikat yang sebelumnya diganti oleh kebiasaan yang mengikat yang sejak itu telah dihapus dari file konfigurasi Anda, metode yang Anda merancang wajar (meskipun sayangnya verbose):
unbind-key -a
, kemudian bangun kembali semua ikatan "default", lalu buat ikatan kustom Anda (beberapa di antaranya mungkin mengesampingkan ikatan "default").Binding server saat ini dapat diekstraksi dengan
list-keys
perintah * ; ini dapat membantu menghasilkan / memelihara.tmux.reset.conf
file yang Anda usulkan , tetapi Anda perlu cara untuk mengekstrak binding default , bukan binding saat ini .* Ada beberapa situasi di mana output
list-keys
saat ini tidak secara langsung dapat digunakan: pengikatan untuk titik koma membutuhkan titik koma yang lolos dengan garis miring terbalik agar tidak ditafsirkan sebagai pemisah perintah tmux , dan setiap binding yang memiliki argumen yang menggunakan tanda kutip ganda di dalam single tanda kutip (tidak ada ikatan default seperti ini) akan keluar sebagai tanda kutip ganda di dalam qoutes ganda .Untuk mendapatkan binding standar, Anda memerlukan server sementara dengan konfigurasi minimal (yaitu tidak ada binding kustom) sehingga Anda dapat menangkap
list-keys
hasilnya. Tidak ada batasan jumlah server tmux yang dapat Anda jalankan, tetapi masing-masing harus menggunakan socket pathname yang berbeda; opsi-L
dan-S
tmux dapat digunakan untuk menentukan nama socket (dalam$TMPDIR/tmux-$UID
atau nama path socket penuh. Jadi, untuk berbicara dengan (atau memulai) server baru pada socket bernamatemp
, Anda akan menggunakan ini:Untuk memastikan itu tidak menggunakan Anda
.tmux.conf
, Anda gunakan-f
untuk menyuruhnya membaca/dev/null
(file khusus yang selalu kosong):Catatan : ini tidak mencegah pemrosesan
/etc/tmux.conf
, jika file tersebut ada; path ke "file konfigurasi sistem" ini adalah kode-keras dan tidak ada opsi untuk mem-bypass-nya (singkat menambal kode).Biasanya, Anda memerlukan
new-session
perintah untuk benar-benar memulai server, tetapi kami tidak ingin sesi apa pun, hanya server yang diinisialisasi untuk kueri. Thestart-server
perintah tidak hanya itu: mulai server tanpa membuat sesi apapun.Sekarang, kita hanya perlu menambahkan perintah "query" kami (
list-keys
dalam hal ini):Catatan : titik koma perlu diloloskan atau dikutip untuk mencegah shell memperlakukannya sebagai pemisah perintah shell karena kami ingin itu menjadi pemisah perintah tmux .
Karena tidak ada sesi untuk dipertahankan, server akan keluar secara otomatis setelah selesai menjalankan
list-keys
perintah.Jadi, Anda dapat menggunakan perintah seperti ini untuk menghasilkan sebagian besar file Anda
.tmux.reset.conf
tanpa harus khawatir untuk sementara waktu menghapus.tmux.conf
file Anda (untuk membiarkan Anda melihat hanya binding standar) dan tanpa harus mematikan server yang ada.Jika
run-shell
perintah itu sinkron, Anda bisa menyematkan panggilan seperti ini di file konfigurasi Anda (menangkap ke file sementara yang kemudian Anda proses dengansource-file
) daripada memiliki file statis (Anda.tmux.reset.conf
). Itu akan membiarkan Anda selalu menggunakan binding default dari versi tmux Anda saat ini (binding default sesekali berubah). Sayangnya, penyelesaianrun-shell
perintah saat ini tidak sinkron sehubungan dengan perintah berikutnya (perintah yang datang setelahrun-shell
perintah biasanya akan berjalan sebelum proses melahirkanrun-shell
telah memiliki kesempatan untuk menyelesaikan).sumber
Berikut adalah rollup dari semua jawaban lain menjadi skrip bash yang secara otomatis akan menghasilkan
.tmux.reset.conf
dari binding kunci default:Baris
sed
perintah tertanam menjaga keluar dari berbagai bagian outputlist-keys
. Ini mungkin memerlukan beberapa penyesuaian untuk spesifikasi sistem Anda.Dalam
.tmux.conf
file Anda, cukup lepaskan ikatan semua kunci dan sumber file ini sebelum menentukan ikatan kunci Anda sendiri:sumber
Silakan juga merujuk ke jawaban lain di sini, karena mereka melakukan pekerjaan dengan baik untuk menjelaskan situasi. Saya miliki di sini tmux 1.8 saya kompatibel tmux.reset.conf, yang saya harus membuat beberapa modifikasi setelah menyalin
tmux -f /dev/null -L temp start-server \; list-keys
output. Secara khusus, beberapa hal harus dikutip.sumber
Saya bertanya ke hulu mereka sepertinya tidak mau memperbaikinya (kecuali seseorang mengajukan PR).
Inilah saya secara manual lolos
tmux list-keys
, diperoleh melalui contoh server baru dengan(terima kasih atas jawaban sebelumnya)
Di atas adalah pada github sehingga Anda dapat melakukan:
CATATAN: Entah bagaimana jawaban Richard Cook masih menghasilkan masalah untuk melarikan diri.
sumber
Berikut ini adalah versi tweak jawaban Richard Cook untuk memperbaiki masalah pelolosan pada tmux 2.1
Tambahkan baris berikut ke awal
.tmux.conf
sumber