Sedikit keterlambatan saat beralih mode dalam vim menggunakan tmux atau layar

68

Beralih ke dan dari mode insert di Vim tidak lagi instan karena saya menggunakan tmux. Setelah menekan Escdalam mode sisipkan, dibutuhkan banyak waktu untuk benar-benar keluar dari mode sisipkan. Setelah menekan Escdan tombol lain apa pun setelahnya, sakelar langsung, dan perintah untuk tombol yang ditekan setelah Escdijalankan. Adakah yang tahu apa yang menyebabkan ini?

Konfigurasi Vim bukan masalah karena penundaan tidak terjadi ketika saya menjalankan Vim di luar tmux, jadi ini mungkin terkait dengan tmux. Saya menggunakan gnome-terminal btw.

Juga patut dicatat, sepertinya saya tidak dapat mendefinisikan binding utama dalam tmux untuk Esc, rencana saya adalah untuk mengikat Esc:

bind Escape send-keys ^[

Sayangnya, tampaknya mengikat apa pun agar Esctmux tidak bekerja. Masalah yang sama juga terjadi di layar.

Ton van den Heuvel
sumber

Jawaban:

122

Setelah membajak halaman manual ternyata tmux memiliki opsi untuk ini. Berikut ini di dalam ~/.tmux.confmemperbaiki masalah penundaan:

 set -sg escape-time 0

Anda harus memulai ulang server tmux Anda atau memuat ulang konfigurasi Anda agar ini berlaku. Untuk melakukan ini, masalah source-file ~/.tmux.confdari prompt tmux.

Ton van den Heuvel
sumber
2
Di mana Anda menemukan ini? Saya tidak dapat menemukan waktu pelarian di mana pun man tmux, dan perintah itu tidak berfungsi untuk saya.
djeikyb
Saya kira hanya tersedia dalam versi pengembangan. Anda bisa mendapatkannya di sini: github.com/ThomasAdam/tmux
Ton van den Heuvel
5
Saya harus menggunakan tmux kill-server sebelum pengaturan ini bekerja untuk saya. Terima kasih!
Sam
1
Ini membuat saya berharap saya bisa memberi Anda 10 upvotes. Menemukan ini setelah satu jam berjuang habis-habisan di vim. Terima kasih!
Malvim
1
@MichaelBrown, saya juga melakukannya, dan masih menemukan masalah ini. Seharusnya tidak masalah sebenarnya, karena kode kunci yang sama dikirim ke terminal emulator terlepas dari apakah Anda menekan escape atau ^ [.
Ton van den Heuvel
4

Saya memiliki masalah berbeda namun serupa yang saya coba selesaikan ketika saya menemukan halaman ini, jadi saya akan mempostingnya di sini kalau-kalau itu membantu orang lain yang mencari jawaban ini dan menemukan halaman ini dengan cara yang sama.

Masalah: mode vi dalam bash mengalami penundaan saat beralih dari mode insert ke mode perintah

Solusi: Di ~/.inputrcfile Anda , tambahkan di set keyseq-timeout nmana nbeberapa nilai rendah lebih besar dari 0. ndefault ke 500 ms, yang merupakan penyebab keterlambatan. Lihat dokumentasi di sini .

Selain itu, jika Anda ingin dapat mengetahui mode apa yang sedang Anda gunakan, lihat garpu bash Dylan Cali .

Kvass
sumber
itu sangat membantu, saya mengaturnya 0.01dan sekarang jauh lebih cepat menyenangkan. Terima kasih!
Itu juga bisa ditambahkan /etc/inputrcuntuk membuatnya tersedia untuk semua pengguna.
1

Sepertinya Anda menggunakan pemetaan yang dimulai dengan ESC. Saat Anda menekan ESC, vim harus menunggu untuk melihat apakah tombol berikutnya adalah yang ada di pemetaan. Jika tidak, maka dapat segera dilanjutkan.

Konfigurasi vim dapat bergantung pada terminal, sehingga fakta bahwa itu tidak terjadi di luar tmux tidak berarti banyak. Vim dapat meminta $TERMvariabel lingkungan dan memilih konfigurasi yang berbeda tergantung pada nilainya.

Karena gnome-terminal menggunakan, AFAIK, xtermsebagai nilai $TERMvariabel, dan tmux menggunakan screen, saya akan melihat semua file konfigurasi vim Anda untuk pengaturan yang hanya digunakan adalah $TERMvariabel sama dengan screen. Dugaan saya adalah bahwa beberapa file konfigurasi vim pada sistem Anda menetapkan pemetaan untuk penanganan tombol panah (yang dimulai dengan ESCkarakter) ketika terminal berada screen.

Anda dapat mengujinya dengan mengubah $TERMvariabel sementara di tmux sebelum memulai vim. Jika shell Anda adalah bash, panggil vim sebagai

TERM=xterm vim

di tmux dan lihat apakah masalahnya tetap ada. Anda tidak dapat menggunakannya sebagai perbaikan, karena mungkin ada perbedaan antara kemampuan terminal tmux dan xterm, dan Anda mungkin mengalami beberapa masalah.

Jan Hlavacek
sumber
Beberapa petunjuk bagus di sini. Saya menggunakan bash, tetapi sayangnya TERM=xterm vimtidak memperbaiki masalah. Saya harus menggali sedikit lebih dalam.
Ton van den Heuvel
1

Sebagaimana judulnya menyebutkan Layar, berikut adalah solusi untuk memperbaiki perilaku tombol Escape di dalam Layar GNU. (Diambil dari sini .)

Menambahkan

maptimeout 5

untuk .screenrcmengkonfigurasi file.

Twonky
sumber