Perintahnya adalah
nnoremap <leader>; :execute "normal! mqA;\<esc>`q"
Jika Anda menekan <leader>;
, Anda akan E114: Missing quote: "normal! mqA;\
diikuti oleh E15: Invalid expression: "normal! mqA;\
. Kenapa ini? Perintah berfungsi dengan baik jika input langsung ke baris perintah.
Perintah menambahkan a ;
di akhir baris saat ini, tanpa mengubah posisi kursor.
Saya menyadari bahwa saya bisa melakukan nnoremap <leader>; mqA;<esc>`q
yang berhasil, pertanyaannya adalah mengapa hal di atas tidak berhasil, dan apa yang dapat dilakukan untuk membuatnya bekerja dalam bentuk eksekusi-normal.
Dugaan saya adalah bahwa diperlukan beberapa tingkat pelarian bersarang, tetapi saya tidak dapat menemukan yang berfungsi.
sumber
:h <>
. Bagian yang relevan adalah: Notasi <> menggunakan <lt> untuk menghindari makna khusus dari nama-nama kunci. Menggunakan backslash juga berfungsi, tetapi hanya ketika 'cpoptions' tidak menyertakan flag 'B'. Jadi, jikaB
flag tidak adacpotions
, Anda dapat menggunakan\<Esc>
untuk mewakili<Esc>
kunci.Anda harus keluar dari
<ESC>
mode perintah dalam. Ini dilakukan dengan awalan dengan<C-v>
. Anda juga memerlukan trailing<CR>
untuk benar-benar menjalankannya. Seperti ini:sumber
Saya menemukan bahwa ada 3 cara untuk melarikan diri dari kunci:
nnoremap <silent> <leader>; :execute "normal! mqA;<C-v><esc>`q"<CR>
nnoremap <silent> <leader>; :execute "normal! mqA;\<lt>esc>`q"<CR>
nnoremap <silent> <leader>; :execute "normal! mqA;\e`q"<CR>
Mirip dengan tombol Enter (
<cr>
):<c-v><cr>
atau\<lt>cr>
atau\r
.sumber