ครั้งแรกmap
และnoremap
มีความคล้ายคลึงกันในการที่ว่าแต่ละสร้างแมปสำหรับผิวธรรมดา, ภาพเลือกและผู้ประกอบการที่ค้างอยู่โหมดพร้อมกัน เป็นกลุ่มรายละเอียดนี้ใน: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
ตามความช่วยเหลือข้างต้นหากคุณต้องการ จำกัด การจับคู่กับโหมดที่ระบุคุณจะต้องเสริม:
'n' (สำหรับปกติ), 'v' (สำหรับภาพและเลือก), 'c' (สำหรับคำสั่ง), 'x' (สำหรับโหมดภาพ), 's' (สำหรับเลือก), 'o' (สำหรับผู้ดำเนินการที่รอดำเนินการ )
ตัวอย่างเช่น
nmap n nzz
จะสร้างโหมดปกติ, n
การทำแผนที่ของ
ตอนนี้noremap
เป็นเพียงรุ่นที่ไม่ใช่ recursive map
ของ
ดังนั้นการแม็พที่ไม่เกิดซ้ำคืออะไร? Vim ก็มีคำตอบเช่นกันด้วย: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.
ตัวอย่างของสิ่งนี้คือการทำแผนที่ต่อไปนี้:
:imap j k
:imap k j
ตอนนี้เสียงเรียกเข้าจะแทนที่ j ด้วย k และ k ด้วยจำนวนอนันต์ j ดังนั้นจึงจะแสดงข้อผิดพลาดที่คุณได้สร้างการทำแผนที่แบบเรียกซ้ำ
นี่คือเหตุผลที่แนะนำโดยทั่วไปว่าคุณเกือบตลอดเวลา (ยกเว้นเมื่อคุณมี<Plug>
การแมปหรือคล้ายกัน) ใช้การแมปที่ไม่เกิดซ้ำ สิ่งนี้จะป้องกันการค้างเป็นกลุ่มเมื่อคุณสร้างการแมปแบบเรียกซ้ำ ดังนั้นการแม็พแบบไม่เรียกซ้ำจึงเป็นวิธีที่ปลอดภัยกว่าในการแม็พคำสั่งในกลุ่ม
ด้วยข้อมูลข้างต้นเราจะเห็นได้ว่า:noreabbrev
เป็นเพียง:abbrev
คำสั่งที่ไม่ใช่แบบเรียกซ้ำ
คุณสามารถใช้:abbrev
เฉพาะในโหมดแทรกเปลี่ยนและคำสั่งเท่านั้น :abbrev
ใช้สำหรับสร้างตัวย่อ (ทางลัดหรือที่รู้จักว่า Vim สามารถขยายได้) การกระจายสั้น ๆ คือการใช้:map
/ :noremap
เพื่อสร้างการแมป:abbrev
/ :noreabbrev
เพื่อสร้างตัวย่อหรือเมื่อใดก็ตามที่คุณต้องการให้ Vim ขยายการพิมพ์ของคุณ