Pendeknya:
- kode kunci adalah cara untuk mewakili kunci
- Urutan kunci yang dipetakan adalah serangkaian kode kunci yang memicu suatu tindakan
Sekarang saya pikir pertanyaan Anda lebih tentang perbedaan antara timeoutlen
dan ttimeoutlen
bukannya perbedaan antara urutan kunci yang dipetakan dan kode kunci.
Jawaban saya didasarkan pada artikel wikia ini yang harus Anda baca karena membahas beberapa poin yang tidak saya sebutkan di sini untuk menjaga jawaban sesingkat dan sejelas mungkin.
Pertama mari kita bicara tentang kode kunci. Artikel ini mendefinisikan dua jenis kode kunci:
Kode kunci terminal:
Mereka adalah bagaimana terminal mewakili kunci.
Kode-kode ini yang dikirim oleh terminal ke Vim.
Untuk mendapatkan daftar kode kunci ini, Anda harus menggunakan dokumentasi terminal Anda. Anda juga dapat melihatnya dengan mengetikkan perintah cat
di terminal Anda dan mengetikkan kunci yang ingin Anda ketahui kode kunci. Misalnya pada terminal saya kode kunci untuk ShiftF1terlihat seperti:
^[[23~
Kode kunci Vim:
Mereka adalah bagaimana vim mewakili kunci.
Vim membutuhkan cara yang konsisten untuk mewakili kunci karena kode kunci terminal berubah dari terminal ke terminal lain. Daftar kode akses Vim dapat diakses di :h t_ku
. Kode kunci Vim untuk ShiftF1terlihat seperti:
<S-F1>
Jadi ketika saya menekan ShiftF1keyboard saya, driver dan OS akan membiarkan terminal tahu bahwa saya menekan tombol-tombol ini yang akan ditafsirkan sebagai ^[[23~
. Terminal akan mengirimkannya ke Vim yang akan mengerti artinya <S-F1>
dan akan memicu tindakan yang dipetakan ke kode kunci ini.
Kami dapat menetapkan kode kunci Vim, jadi jika terminal Anda mengirim kode kunci yang tidak dimengerti oleh Vim, <S-F1>
misalnya Anda bisa menggunakan perintah berikut. Ini akan memberi tahu Vim ketika Anda menerima kode kunci ^[[24~
, terjemahkan <S-F1>
:
set <S-F1> ^[[24~
Jadi, apa urutan kunci yang dipetakan?
Urutan kunci yang dipetakan akan menjadi lhs pemetaan dan dapat berupa kode kunci Vim atau kode kunci Terminal. Sebagai contoh:
:nmap ^[[24~ :bn<CR>
:nmap <S-F1> :bn<CR>
Pemetaan pertama akan memetakan kode kunci terminal sementara yang kedua memetakan kode kunci Vim.
Sekarang untuk perbedaan antara timeoutlen
dan ttimeoutlen
?
ttimeoutlen
adalah waktu Vim akan menunggu untuk bagian-bagian yang berbeda dari kode kunci terminal (dalam contoh kita sebelumnya yang akan ^[
kemudian [
kemudian 2
, dll ...
Karena kode kunci ini dikirim oleh terminal, seharusnya tidak ada penundaan di antara input ini (karena mereka dikirim 'sekaligus' oleh terminal). Inilah sebabnya mengapa dokter merekomendasikan nilai yang sangat kecil untuk pengaturan ini.
timeoutlen
adalah waktu Vim akan menunggu kode kunci Vim berturut-turut yang dimasukkan secara manual oleh pengguna dan dengan demikian lebih lama untuk dimasukkan daripada kode kunci terminal.
Untuk menggunakan contoh katakanlah:
- Anda memetakan
^[[1;6B
suatu tindakan
^[1;6B
adalah kode kunci terminal Anda ctrlshiftdown
^[
adalah kode kunci terminal Anda Escape.
Perilaku yang harus Anda harapkan:
- Jika Anda menetapkan besar
ttimeoutlen
, setiap kali Anda mengetik Escape, Vim akan menunggu untuk melihat apakah yang Anda maksudkan ^[
(yaitu Escape) atau ^[1;6B
(yaitu ctrlshiftdown)
- Jika Anda menetapkan kecil
ttimeoutlen
, Anda tidak akan memiliki penundaan ketika Anda mengetik Escapekarena Vim akan tahu bahwa itu adalah kode kunci lengkap.
Dan timeoutlen
akan bertindak pada 'tingkat yang lebih tinggi', jika Anda memiliki pemetaan berikut:
inoremap jj <Esc>
inoremap jk <Esc>:nohl<CR>
Ketika Anda mengetik jvim akan menunggu timeoutlen
bukan karena awal kode kunci terminal jtidak lengkap tetapi karena menunggu kode kunci Vim berikutnya.
Saya harap penjelasan saya masuk akal, perhatikan bahwa beberapa pemetaan yang saya gunakan tidak masuk akal dalam sudut pandang fungsional tetapi di sini untuk kenyamanan penjelasan.