Đầu tiên, map
và noremap
tương tự nhau ở chỗ mỗi cái tạo ra ánh xạ cho các chế độ chờ bình thường, trực quan, chọn và vận hành đồng thời . Vim chi tiết điều này trong :help map-overview
:
Overview of which map command works in which mode. More details below.
COMMANDS MODES ~
:map :noremap :unmap Normal, Visual, Select, Operator-pending
:nmap :nnoremap :nunmap Normal
:vmap :vnoremap :vunmap Visual and Select
:smap :snoremap :sunmap Select
:xmap :xnoremap :xunmap Visual
:omap :onoremap :ounmap Operator-pending
:map! :noremap! :unmap! Insert and Command-line
:imap :inoremap :iunmap Insert
:lmap :lnoremap :lunmap Insert, Command-line, Lang-Arg
:cmap :cnoremap :cunmap Command-line
Theo trợ giúp ở trên, nếu bạn muốn hạn chế ánh xạ sang một chế độ cụ thể, bạn phải trả trước:
'n' (đối với bình thường), 'v' (đối với trực quan và chọn), 'c' (đối với lệnh), 'x' (đối với chế độ trực quan), 's' (đối với chọn), 'o' (đối với toán tử đang chờ xử lý ).
Ví dụ,
nmap n nzz
sẽ tạo một chế độ bình thường, ánh xạ đệ quy của n
.
Bây giờ, noremap
chỉ là một phiên bản không đệ quy của map
.
Vậy ánh xạ không đệ quy là gì? Vim cũng có câu trả lời cho điều đó, với :help map-recursive
:
If you include the {lhs} in the {rhs} you have a recursive mapping. When
{lhs} is typed, it will be replaced with {rhs}. When the {lhs} which is
included in {rhs} is encountered it will be replaced with {rhs}, and so on.
This makes it possible to repeat a command an infinite number of times. The
only problem is that the only way to stop this is by causing an error. The
macros to solve a maze uses this, look there for an example. There is one
exception: If the {rhs} starts with {lhs}, the first character is not mapped
again (this is Vi compatible).
For example: >
:map ab abcd
will execute the "a" command and insert "bcd" in the text. The "ab" in the
{rhs} will not be mapped again.
Một ví dụ về điều này là ánh xạ như sau:
:imap j k
:imap k j
Bây giờ, vim sẽ thay thế j bằng k và k bằng j số lần vô hạn của j và do đó sẽ hiển thị cho bạn một lỗi mà bạn đã tạo ánh xạ đệ quy.
Đây là lý do tại sao bạn nên thường xuyên (trừ khi bạn có <Plug>
ánh xạ hoặc tương tự) sử dụng ánh xạ không đệ quy. Điều này ngăn Vim treo khi bạn vô tình tạo ánh xạ đệ quy. Do đó ánh xạ không đệ quy là cách an toàn hơn để ánh xạ các lệnh trong Vim.
Với các thông tin trên, chúng ta có thể thấy đó :noreabbrev
chỉ là một phiên bản :abbrev
lệnh không đệ quy .
Bạn chỉ có thể sử dụng :abbrev
trong các chế độ chèn, thay thế và lệnh. :abbrev
được sử dụng để tạo chữ viết tắt, (còn gọi là phím tắt mà Vim có thể mở rộng). Việc mở rộng ngắn là sử dụng :map
/ :noremap
để tạo ánh xạ, :abbrev
/ :noreabbrev
để tạo chữ viết tắt hoặc bất cứ khi nào bạn muốn Vim mở rộng cách gõ của mình.