Tại sao tôi nhận được một lỗi trích dẫn bị thiếu khi sử dụng sau đây trong ánh xạ sử dụng thực thi và bình thường?


8

Lệnh là

nnoremap <leader>; :execute "normal! mqA;\<esc>`q"

Nếu bạn sau đó nhấn <leader>;, bạn sẽ làm E114: Missing quote: "normal! mqA;\theo E15: Invalid expression: "normal! mqA;\. Tại sao lại thế này? Lệnh hoạt động tốt nếu đầu vào trực tiếp vào dòng lệnh.

Lệnh thêm một ;ở cuối dòng hiện tại, mà không thay đổi vị trí con trỏ.

Tôi nhận ra rằng tôi chỉ có thể làm những gì nnoremap <leader>; mqA;<esc>`qhoạt động, câu hỏi là tại sao những điều trên không hoạt động, và những gì có thể được thực hiện để làm cho nó hoạt động ở dạng thực thi bình thường.

Tôi đoán là sẽ cần một số mức thoát lồng nhau, nhưng tôi không thể tìm thấy một mức nào hoạt động.

Câu trả lời:


9

Bạn cần thoát <qua <lt>:

nnoremap <leader>; :execute "normal! mqA;\<lt>esc>`q"<cr>

Lưu ý: thêm vào <cr>để thực hiện lệnh là tốt.

Tuy nhiên điều này có thể được đơn giản hóa khá nhiều:

nnoremap <leader>; mqA;<esc>`q

Sử dụng ánh xạ biểu thức, bạn có thể làm cho ánh xạ của mình có điều kiện dựa trên ;ký tự dấu :

nnoremap <expr> <leader>; getline('.') =~ ';$' ? '' : "mqA;\<esc>`q"

Để được trợ giúp thêm xem:

:h <lt>
:h map-<expr>

1
Trong tài liệu vim. thấy :h <>. Phần có liên quan là: Ký hiệu <> sử dụng <lt> để thoát khỏi ý nghĩa đặc biệt của tên khóa. Sử dụng dấu gạch chéo ngược cũng hoạt động, nhưng chỉ khi 'cpoptions' không bao gồm cờ 'B'. Vì vậy, nếu Bcờ không ở trong cpotions, bạn có thể sử dụng \<Esc>để đại diện cho <Esc>khóa.
jdhao

5

Bạn cần thoát khỏi <ESC>chế độ lệnh. Điều này được thực hiện bằng cách thêm tiền tố vào <C-v>. Bạn cũng cần một dấu vết <CR>để thực sự chạy nó. Như thế này:

nnoremap <silent> <leader>; :execute "normal! mqA;<C-v><ESC>`q"<CR>

0

Tôi thấy rằng có 3 cách để thoát chìa khóa:

  1. nnoremap <silent> <leader>; :execute "normal! mqA;<C-v><esc>`q"<CR>
  2. nnoremap <silent> <leader>; :execute "normal! mqA;\<lt>esc>`q"<CR>
  3. nnoremap <silent> <leader>; :execute "normal! mqA;\e`q"<CR>

Tương tự cho phím Enter ( <cr>):

<c-v><cr>hoặc \<lt>cr>hoặc \r.


Chào mừng đến với Vi và Vim !
D. Ben Knoble
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.