Câu trả lời:
remap
là một tùy chọn làm cho ánh xạ hoạt động đệ quy. Theo mặc định, nó được bật và tôi khuyên bạn nên để nó như vậy. Phần còn lại là các lệnh ánh xạ , được mô tả dưới đây:
:map
và :noremap
là các phiên bản đệ quy và không đệ quy của các lệnh ánh xạ khác nhau. Điều đó có nghĩa là nếu bạn làm:
:map j gg
:map Q j
:noremap W j
j
sẽ được ánh xạ tới gg
. cũngQ
sẽ được ánh xạ tới , vì sẽ được mở rộng cho ánh xạ đệ quy. sẽ được ánh xạ tới (và không ) vì sẽ không được mở rộng cho ánh xạ không đệ quy.gg
j
W
j
gg
j
Bây giờ hãy nhớ rằng Vim là một trình soạn thảo phương thức . Nó có chế độ bình thường , chế độ trực quan và các chế độ khác.
Đối với mỗi bộ ánh xạ này, có một ánh xạ hoạt động ở chế độ bình thường, trực quan, chọn và vận hành ( :map
và :noremap
), một chế độ hoạt động ở chế độ bình thường ( :nmap
và :nnoremap
), một ở chế độ trực quan ( :vmap
và :vnoremap
), v.v.
Để được hướng dẫn thêm về điều này, xem:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
là một số ngược lại map
. Tôi có nghĩa là một cái gì đó loại bỏ một bản đồ. Cảm ơn câu trả lời. Nó làm rõ tôi
:map
, v.v. không hoạt động ở tất cả các chế độ, chính xác, chỉ tất cả các chế độ phổ biến (cụ thể là chế độ bình thường, chế độ trực quan, chế độ chọn và chế độ chờ vận hành). Nếu bạn muốn ánh xạ hoạt động ở chế độ chèn, dòng lệnh hoặc lang-arg, bạn cần sử dụng :map!
, v.v. (Nguồn: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
Tôi nghĩ rằng tài liệu Vim nên đã giải thích ý nghĩa đằng sau việc đặt tên của các lệnh này. Chỉ nói cho bạn biết những gì họ làm không giúp bạn nhớ tên.
map
là "gốc" của tất cả các lệnh ánh xạ đệ quy. Biểu mẫu gốc áp dụng cho các chế độ "bình thường", "trực quan + chọn" và "chờ toán tử". (Tôi đang sử dụng thuật ngữ "root" như trong ngôn ngữ học .)
noremap
là "gốc" của tất cả các lệnh ánh xạ không đệ quy. Các hình thức gốc áp dụng cho các chế độ tương tự như map
. (Hãy nghĩ về nore
tiền tố có nghĩa là "không đệ quy".)
(Lưu ý rằng cũng có các !
chế độ như thế map!
áp dụng cho chèn & dòng lệnh.)
Xem bên dưới để biết "đệ quy" nghĩa là gì trong bối cảnh này.
Chuẩn bị một chữ cái chế độ như n
sửa đổi các chế độ mà ánh xạ hoạt động. Nó có thể chọn một tập hợp con của danh sách các chế độ áp dụng (ví dụ: "trực quan") hoặc chọn các chế độ khác map
không áp dụng cho (ví dụ: "chèn").
Sử dụng help map-modes
sẽ chỉ cho bạn một vài bảng giải thích cách kiểm soát chế độ mà ánh xạ áp dụng.
Chế độ chữ:
n
: chỉ bình thườngv
: trực quan và chọno
: nhà điều hành đang chờ xử lýx
: Chỉ nhìns
: chỉ chọni
: chènc
: dòng lệnhl
: insert, dòng lệnh, regrec-search (và các loại khác. Gọi chung là chế độ giả "Lang-Arg")" Đệ quy " có nghĩa là ánh xạ được mở rộng thành kết quả, sau đó kết quả được mở rộng sang kết quả khác, v.v.
Việc mở rộng dừng lại khi một trong những điều này là đúng:
Tại thời điểm đó, "ý nghĩa" mặc định của kết quả cuối cùng được áp dụng / thực thi.
" Không đệ quy " có nghĩa là ánh xạ chỉ được mở rộng một lần và kết quả đó được áp dụng / thực thi.
Thí dụ:
nmap K H
nnoremap H G
nnoremap G gg
Các nguyên nhân trên K
để mở rộng đến H
, sau đó H
mở rộng đến G
và dừng lại. Nó dừng lại vì nnoremap
, mở rộng và dừng lại ngay lập tức. Ý nghĩa của G
sẽ được thực thi (tức là "nhảy đến dòng cuối cùng"). Nhiều nhất một ánh xạ không đệ quy sẽ được áp dụng trong chuỗi mở rộng (nó sẽ là lần mở rộng cuối cùng xảy ra).
Các bản đồ của G
để gg
chỉ áp dụng nếu bạn bấm G
, nhưng không nếu bạn bấm K
. Ánh xạ này không ảnh hưởng đến việc nhấn K
bất kể có G
được ánh xạ đệ quy hay không, vì dòng 2 khiến việc mở rộng bị K
dừng lại, vì vậy dòng 3 sẽ không được sử dụng.
map
chỉ áp dụng cho các chế độ thông thường, trực quan, chọn và vận hành, không áp dụng cho tất cả các chế độ.
Một sự khác biệt là:
:map
does nvo
== normal + (visual + select) + toán tử đang chờ xử lý:map!
hiện ic
== insert + chế độ dòng lệnhnhư đã nêu trên help map-modes
bảng.
Vì vậy: map
không ánh xạ tới tất cả các chế độ .
Để ánh xạ tới tất cả các chế độ, bạn cần cả hai :map
và :map!
.
command mode
là một tên lịch sử khác cho normal mode
viz. chapt 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ). Chữ viết tắt 'c' là cho 'dòng lệnh'. Nói cách khác, theo mặc định: ánh xạ map! lhs rhs
đệ quy lhs sang rhs cho chế độ insert + lệnh-LINE . Đó là trừ khi remap
tùy chọn mặc định bị vô hiệu hóa rõ ràng với set noremap[!]
in / / .vimrc. Trong trường hợp đó ánh xạ sẽ không được đệ quy (không nên).
vnoremap
vàvmap
làm việc trong chế độ Visual AND Chọn. Để có một ánh xạ chỉ trong chế độ Visual, sử dụngxmap
vàxnoremap
.