Trái với những gì bạn có thể mong đợi, noremap
và map
không thực sự áp dụng cho tất cả các chế độ.Dựa trên các bản tóm tắt rất hữu ích từ :help map-listing
, đây là một danh sách các nhân vật có thể được bắt đầu (hoặc hậu tố trong trường hợp !
) để map
, noremap
, unmap
, và mapclear
, cùng với các phương thức mà họ áp dụng đối với:
- (none) - Bình thường, Visual, Chọn, và điều hành đang chờ giải quyết
n
- Bình thường
v
- thị giác và Chọn
x
- Visual
s
- Chọn
o
- Nhà tổ chức đang chờ giải quyết
!
- Insert và Command-line
i
- Chèn
c
- dòng lệnh
l
- ": lmap" ánh xạ cho Insert , Dòng lệnh và Lang-Arg
Vì vậy,Ánh xạsẽ không có hiệu lực trong chế độ Chèn hoặc Dòng lệnh, và không cân nhắc, có thể không hoạt động như dự định trong chế độ Visual, Select hoặc Operator-pending.
Tuy nhiên, ánh xạ có thể được điều chỉnh để hoạt động ở các chế độ khác nhau, chỉ đơn giản bằng cách thay đổi chế độ và quay lại ánh xạ. Ví dụ, noremap
ánh xạ đó phát hành dòng lệnh lệnh nhưng chỉ làm việc trong chế độ bình thường có thể thích nghi cũng làm việc trong các chế độ khác như thể hiện bởi ví dụ này:
noremap <C-Tab> :<C-U>set list!<CR>
inoremap <C-Tab> <C-O>:set list!<CR>
cnoremap <C-Tab> <C-C>:set list!<CR>:<Up>
noremap
áp dụng cho Bình thường, Visual, Chọn, và Chế độ vận hành đang chờ xử lý, trong đó :<C-U>
chuyển sang chế độ Dòng lệnh, sau đó xóa dòng hiện tại trong trường hợp Vim chèn một phạm vi; inoremap
áp dụng cho chế độ Chèn, trong đó <C-O>:
tạm thời thoát sang chế độ Bình thường, sau đó chuyển sang chế độ Dòng lệnh; và cnoremap
áp dụng cho chế độ dòng lệnh, trong đó <C-C>:
thoát và chuyển sang chế độ dòng lệnh để xóa dòng nhưng, không giống như <C-U>
, giữ lại trong lịch sử lệnh sao cho :<Up>
có thể đưa lại.
Ba ánh xạ này bao gồm tất cả sáu chế độ. (Rõ ràng là 'Lang-Arg' không phải là một chế độ.) Có một số trường hợp góc mà nó không hoạt động, nhưng sau đó cũng có một số trường hợp nó hoạt động khi tôi đã nghĩ rằng nó sẽ không, và tôi don không hiểu tại sao. Ngoài ra, hầu hết các chế độ sẽ mất những thứ nhỏ như lựa chọn và các nhà khai thác đang chờ xử lý, ngay cả khi lệnh được ánh xạ sẽ không làm mất những thứ này. Ví dụ, khi ở chế độ Chèn, tôi không thấy lý do tại sao ví dụ tôi đã đưa ra sẽ cần phải chia chỉnh sửa hiện tại thành các thay đổi riêng trong lịch sử hoàn tác/làm lại (thử gõ i123<C-O><Esc>456<Esc>u
). Thành thật mà nói, sử dụng các ánh xạ chính để chạy các lệnh theo cách này có vẻ hơi khó khăn với tôi, nhưng tôi không biết cách nào khác.
Nó không phải ngay lập tức rõ ràng rằng blockquote của bạn "tại sao không có một bản đồ phương thức bao gồm tất cả, thay vì phát hành cả bản đồ và bản đồ!" Là trích dẫn một phần của [bình luận của nil] (http://stackoverflow.com/questions/12953183 # comment17559832_12953259) về câu trả lời của Paul Ruane. –
Vì vậy, dường như tôi phải nhận xét về câu trả lời này thay vì sửa chữa nó. Trích dẫn từ bình luận của nil không đọc đúng, mặc dù câu gốc của nil là đúng ngữ pháp. '' và ' 'không phải là các đầu tiên; họ không cần phải bắt đầu. 'nmap' không phải là đệ quy tương đương với' noremap', vì vậy nó có thể được cải thiện bằng cách thay đổi 'nmap' thành' map' hoặc nói ‘' * map' so với '* noremap'’. Tôi đã khắc phục các sự cố này trong bản chỉnh sửa nhưng đã bị từ chối. Tôi luôn luôn có vẻ để có được nói-off cho hoặc chỉnh sửa quá ít hoặc chỉnh sửa quá nhiều; Tôi không thể chiến thắng với người kiểm duyệt. SE quá * quan liêu. –