Jawaban:
remap
adalah opsi yang membuat pemetaan bekerja secara rekursif. Secara default aktif dan saya sarankan Anda membiarkannya seperti itu. Sisanya adalah perintah pemetaan , dijelaskan di bawah ini:
:map
dan :noremap
merupakan versi rekursif dan non-rekursif dari berbagai perintah pemetaan. Apa itu artinya jika Anda melakukannya:
:map j gg
:map Q j
:noremap W j
j
akan dipetakan ke gg
. Q
akan juga dipetakan ke gg
, karena j
akan diperluas untuk pemetaan rekursif. W
akan dipetakan ke j
(dan tidak ke gg
) karena j
tidak akan diperluas untuk pemetaan non-rekursif.
Sekarang ingat bahwa Vim adalah editor modal . Ini memiliki mode normal , mode visual dan mode lainnya.
Untuk masing-masing set pemetaan ini, ada pemetaan yang berfungsi dalam mode normal, visual, pilih dan operator ( :map
dan :noremap
), yang bekerja dalam mode normal ( :nmap
dan :nnoremap
), satu dalam mode visual ( :vmap
dan :vnoremap
) dan seterusnya.
Untuk panduan lebih lanjut tentang ini, lihat:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
ada yang bertolak belakang map
. Maksud saya sesuatu yang menghilangkan pemetaan. Terima kasih atas jawabannya. Itu mengklarifikasi saya
:map
, dll tidak bekerja di semua mode, tepatnya, hanya semua yang umum (khususnya, mode normal, mode visual, mode pilih, dan mode operator-pending). Jika Anda ingin pemetaan berfungsi dalam mode insert, command-line, atau lang-arg, Anda perlu menggunakan :map!
, dll. (Sumber: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Saya pikir dokumentasi Vim seharusnya menjelaskan arti di balik penamaan perintah ini. Memberitahu Anda apa yang mereka lakukan tidak membantu Anda mengingat namanya.
map
adalah "root" dari semua perintah pemetaan rekursif. Formulir root berlaku untuk mode "normal", "visual + select", dan "menunggu operator". (Saya menggunakan istilah "root" seperti dalam linguistik .)
noremap
adalah "root" dari semua perintah pemetaan non-rekursif. Formulir root berlaku untuk mode yang sama dengan map
. (Pikirkan nore
awalan yang berarti "non-rekursif".)
(Perhatikan bahwa ada juga !
mode seperti map!
itu yang berlaku untuk menyisipkan & baris perintah.)
Lihat di bawah untuk arti "rekursif" dalam konteks ini.
Mempertahankan huruf mode seperti n
memodifikasi mode pemetaan bekerja. Ini dapat memilih subset dari daftar mode yang berlaku (misalnya hanya "visual"), atau memilih mode lain yang map
tidak berlaku (misalnya "masukkan").
Gunakan help map-modes
akan menunjukkan kepada Anda beberapa tabel yang menjelaskan bagaimana mengontrol mode pemetaan yang berlaku.
Huruf mode:
n
: hanya normalv
: visual dan piliho
: menunggu operatorx
: hanya visuals
: pilih sajai
: memasukkanc
: garis komandol
: masukkan, command-line, regexp-search (dan lainnya. Secara kolektif disebut "Lang-Arg" mode semu)" Rekursif " berarti pemetaan diperluas ke hasil, kemudian hasilnya diperluas ke hasil lain, dan seterusnya.
Ekspansi berhenti ketika salah satu dari ini benar:
Pada titik itu, "makna" default Vim dari hasil akhir diterapkan / dieksekusi.
" Non-rekursif " berarti pemetaan hanya diperluas sekali, dan hasilnya diterapkan / dijalankan.
Contoh:
nmap K H
nnoremap H G
nnoremap G gg
Penyebab di atas K
untuk memperluas ke H
, lalu H
untuk memperluas ke G
dan berhenti. Itu berhenti karena nnoremap
, yang mengembang dan berhenti segera. Arti dari G
akan dieksekusi (yaitu "melompat ke baris terakhir"). Paling-paling satu pemetaan non-rekursif akan diterapkan dalam rantai ekspansi (itu akan menjadi ekspansi terakhir yang terjadi).
Pemetaan G
untuk gg
hanya berlaku jika Anda menekan G
, tetapi tidak jika Anda menekan K
. Pemetaan ini tidak memengaruhi pengepresan K
terlepas dari apakah G
dipetakan secara rekursif atau tidak, karena jalur 2 yang menyebabkan ekspansi K
berhenti, sehingga saluran 3 tidak akan digunakan.
map
hanya berlaku untuk mode normal, visual, pilih, dan menunggu operator, tidak untuk semua mode.
Salah satu perbedaannya adalah:
:map
tidak nvo
== normal + (visual + pilih) + operator tertunda:map!
tidak ic
== masukkan + mode baris perintahseperti yang tertera pada help map-modes
tabel.
Jadi: map
tidak memetakan ke semua mode .
Untuk memetakan ke semua mode, Anda membutuhkan keduanya :map
dan :map!
.
command mode
adalah nama historis lain untuk normal mode
yaitu. bab 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). Singkatan 'c' adalah untuk 'command-line'. Dengan kata lain, secara default: memetakan lhs ke rhs map! lhs rhs
secara rekursif untuk mode insert + command-LINE . Itu kecuali remap
opsi default dinonaktifkan secara eksplisit dengan set noremap[!]
di ~ / .vimrc. Dalam hal ini pemetaan tidak akan bersifat rekursif (tidak disarankan).
vnoremap
danvmap
bekerja dalam mode Visual DAN Pilih. Untuk memiliki pemetaan hanya dalam mode Visual, gunakanxmap
danxnoremap
.