Sự khác biệt giữa các lệnh map, noremap, viết tắt và norablesenev là gì?


19

Các lệnh này chuyển đổi một bộ tổ hợp phím sang một cách khác theo một cách nào đó, nhưng tôi hơi mờ nhạt trong đó một lệnh thích hợp nhất cho một số tình huống. Ngoài ra, có những !biến thể của chúng là tốt. Hiện tại, việc sử dụng chúng của chúng khá khó hiểu, vậy tôi có thể biết những cạm bẫy liên quan đến nhau là gì không? Trong ghi chú đặc biệt về các phiên bản chế độ khác nhau có thể là hữu ích, kể từ khi tôi học được từ Peter Rincker trong một chú thích rằng cmapcó thể mở rộng khá nhiều bất cứ nơi nào trong dòng và không chỉ khi tôi đang sử dụng :lệnh. Những biện pháp phòng ngừa nào tôi có thể chống lại những cạm bẫy tiềm năng?


Phần tiếp theo là một bit meta: Chúng ta nên sử dụng hình thức nào trong khi trả lời trên trang web này? - tôi nên hỏi điều này trên Meta, hoặc thêm nó vào câu hỏi?
muru

Tôi sẽ nói nó phụ thuộc. Tôi sẽ luôn sử dụng phiên bản noremap nếu thể hiện ánh xạ. Bằng cách này, mọi người có thói quen sử dụng ánh xạ không đệ quy trên các phiên bản đệ quy. Tất nhiên, trừ khi, có một lý do để sử dụng bản đồ cụ thể, ví dụ, trong ánh xạ <Plug>.
akshay

Câu trả lời:


21

Đầu tiên, mapnoremaptươ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ờ, noremapchỉ 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 đó :noreabbrevchỉ là một phiên bản :abbrevlệnh không đệ quy .

Bạn chỉ có thể sử dụng :abbrevtrong 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.


1
Tránh treo không phải là lý do duy nhất để sử dụng các norehình thức của lệnh bản đồ. Một lý do khác (và theo tôi, quan trọng hơn) để sử dụng chúng là chúng làm cho ánh xạ của bạn trở nên đáng tin cậy / có thể dự đoán được. Nếu bạn sử dụng biểu mẫu đơn giản và rhschứa khóa có thể được ánh xạ sang thứ khác, thì ánh xạ của bạn có thể có hành vi hoàn toàn khác so với dự định.
Giàu
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.