Mendeteksi jika kunci terikat ke sesuatu di vim

89

Saya ingin tahu apakah ada cara untuk mengetahui apakah kunci melakukan sesuatu di vim. Saya tahu bahwa saya dapat menggunakan :mapuntuk melihat pemetaan yang ditentukan pengguna, tetapi apakah ada sesuatu untuk barang bawaan?

Misalnya, saya selalu CTRL- Wterikat untuk menutup tab, karena saya pikir itu tidak digunakan. Setelah setengah tahun, saya menemukan bahwa ada beberapa urutan yang menggunakannya, seperti CTRL- W CTRL- Suntuk membelah jendela, dan itu adalah mimpi buruk untuk melatih diri saya kembali.

K. Norbert
sumber
4
Berbicara tentang tabrakan yang tidak disengaja dari pemetaan yang ditentukan pengguna, itu benar-benar praktik yang baik untuk menggunakan mapleader
derenio

Jawaban:

80

Jika Anda memeriksa jawaban yang disarankan oleh Randy Morris, Anda akan menemukannya

:help index 

akan memberi Anda daftar yang Anda inginkan.

skeept
sumber
sangat berguna! senang mengetahui ada tempat yang dapat Anda kunjungi jika Anda hanya ingin melihat-lihat untuk mempelajari sesuatu yang baru
JonnyRaa
41

Untuk memeriksa pemetaan default:

:help index

Untuk pemetaan lain yang dilakukan oleh pengguna atau plugin:

:map
:map!

Dari http://vim.wikia.com/wiki/Mapping_keys_in_Vim_- Tutorial (Bagian_1) :

Perintah pertama menampilkan peta yang bekerja dalam mode normal, visual dan pilih dan operator menunggu. Perintah kedua menampilkan peta yang bekerja dalam mode sisipkan dan baris perintah.

Biasanya keluaran dari perintah di atas akan menjangkau beberapa halaman. Anda dapat menggunakan serangkaian perintah berikut untuk mengarahkan output ke file vim_maps.txt:

:redir! > vim_maps.txt
:map
:map!
:redir END
Hieu
sumber
Kecuali versi Vim yang lebih baru tiba-tiba menawarkan alternatif yang lebih baik, ini tampaknya menjadi satu-satunya cara untuk mencari peta kunci yang disertakan dan khusus. mapcheck(seperti yang disebutkan dalam jawaban lain ) juga hanya mencakup keybind kustom. Perbedaan utama antara mengeluarkan ke file teks dan pemeriksaan peta adalah bahwa mengeluarkan ke file teks dan / atau menggunakan :help indexmemungkinkan Anda /C-wdi Vim untuk menemukan apa pun menggunakanC-w
Zoe
34

Bukan jawaban lengkap, tetapi Anda mungkin ingin memeriksa :help map-which-keysdaftar kunci yang vim rekomendasikan untuk Anda gunakan di peta khusus Anda.

Bagian bantuan tersebut memiliki rekomendasi tentang cara mengetahui apakah kunci tertentu dipetakan ke suatu tindakan.

Randy Morris
sumber
19

Gunakan :map!dan :mapuntuk mengatur kunci secara manual dan :help 'char(-combination)'untuk mengetahui kunci mana yang telah dipetakan di vim out-of-the-box (/ dari opsi kompilasi spesifik Anda). (Agak di luar topik tetapi masih dapat diterima (menurut saya): Gunakan :scriptnamesuntuk melihat file mana yang telah bersumber dalam urutan seperti apa.)

shindojin
sumber
Jika Anda ingin mencari kunci apa yang memicu perintah tertentu, Anda dapat melakukan ini:: redir keys.txt: map: redir end Kemudian buka keys.txt dan cari perintah apa yang terikat.
Christian Oudard
18

Saya membaca sekilas :help indexdan membuat daftar dari beberapa nmapkunci yang tidak digunakan :

  • Q (alihkan ke mode "Ex")
  • Z kecuali ZZ, ZQ
  • \
  • <Space>(sama seperti ldalam mode normal; kunci terbesar dan paling jarang digunakan dalam mode normal)
  • gb, gc, gl, gx, gy, gz
  • gs (tidur)
  • zp, zq, zu, zy
  • cd, cm, co, cp, cq, cr, cs, cu, cx, cy
  • dc, dm, do, dp, dq, dr, ds, du, dx, dy
  • gA, gB, gC, gG, gK, gL, gM, gO, gS, gX, gY, gZ
  • zB, zI, zJ, zK, zP, zQ, zP, zS, zT, zU, zV, zY, zZ
  • ] a,] b,] e,] g,] h,] j,] k,] l,] n,] o,] q,] r,] t,] u,] v,] w,] x ,] y
  • [a, [b, [e, [g, [h, [j, [k, [l, [n, [o, [q, [r, [t], [u, [v, [w, [x]] , [y
  • CTRL-G, CTRL-K
  • CTRL- \ a - z (disediakan untuk ekstensi)
  • CTRL- \ A - Z (tidak digunakan)

Harap perbarui / komentar.

Michal Čizmazia
sumber
12

Anda dapat menggunakan mapcheck.: -

Misalnya, saya ingin memetakan <CR> ,ike gg=Gfile yang menjorok ke dalam. Untuk memeriksa apakah sudah ada pemetaan untuk<CR> , i

if mapcheck("\<CR>", "I") == "" |echo "no mapping"

... tapi ini tidak akan mendeteksi jika pemetaan adalah bagian dari suatu urutan.

Moha si unta yang maha kuasa
sumber
Saya mencoba untuk memeriksa apakah "o" terikat ke sesuatu dalam mode normal, dengan yang berikut: if mapcheck ("o", "N") == "" | echo "tidak ada pemetaan" tetapi melaporkan "tidak ada pemetaan", ketika o pasti terikat untuk "membuka baris baru". Apakah saya salah menggunakannya?
K. Norbert
@ K. Norbert: Saya percaya ini untuk pemetaan yang ditentukan pengguna
Moha unta yang maha kuasa