ความแตกต่างระหว่างคืออะไรremap
, noremap
, nnoremap
และvnoremap
คำสั่งการทำแผนที่ในกลุ่ม?
ความแตกต่างระหว่างคืออะไรremap
, noremap
, nnoremap
และvnoremap
คำสั่งการทำแผนที่ในกลุ่ม?
คำตอบ:
remap
เป็นตัวเลือกที่ทำให้การแมปทำงานซ้ำ โดยค่าเริ่มต้นจะเปิดอยู่และฉันขอแนะนำให้คุณปล่อยไว้อย่างนั้น ส่วนที่เหลือเป็นคำสั่งการจับคู่อธิบายไว้ด้านล่าง:
:map
และ:noremap
เป็นเวอร์ชันแบบเรียกซ้ำและไม่ใช่แบบเรียกซ้ำของคำสั่งการแม็พต่างๆ หมายความว่าถ้าคุณทำ:
:map j gg
:map Q j
:noremap W j
j
gg
จะได้รับการแมปไป Q
จะยังถูกแมปไปgg
เพราะj
จะขยายสำหรับการทำแผนที่ recursive W
จะถูกแมปกับj
(และไม่ให้gg
) เพราะj
จะไม่ได้รับการขยายสำหรับการทำแผนที่ที่ไม่เกิดซ้ำ
ตอนนี้จำได้ว่าเป็นกลุ่มเป็นบรรณาธิการกิริยา มันมีโหมดปกติภาพและโหมดอื่น ๆ
สำหรับการแม็พแต่ละชุดเหล่านี้มีการแม็พที่ทำงานในโหมดปกติ, ภาพ, เลือกและโอเปอเรเตอร์ ( :map
และ:noremap
), หนึ่งภาพที่ทำงานในโหมดปกติ ( :nmap
และ:nnoremap
), หนึ่งภาพในโหมดภาพ ( :vmap
และ:vnoremap
) เป็นต้น
สำหรับคำแนะนำเพิ่มเติมเกี่ยวกับสิ่งนี้โปรดดู:
:help :map
:help :noremap
:help recursive_mapping
:help :map-modes
noremap
map
ฉันหมายถึงสิ่งที่ลบการแมป ขอบคุณสำหรับคำตอบ. มันทำให้ฉันกระจ่าง
:map
ฯลฯ ไม่สามารถใช้งานได้ในทุกโหมดทุกประการ(โดยเฉพาะโหมดปกติโหมดภาพโหมดเลือกและ โหมดที่รอดำเนินการ) หากคุณต้องการให้การแมปทำงานในโหมดแทรกบรรทัดคำสั่งหรือ lang-arg คุณต้องใช้:map!
ฯลฯ (ที่มา: vimdoc.sourceforge.net/htmldoc/map.html#map-overview )
ฉันคิดว่าเอกสาร Vim ควรอธิบายความหมายเบื้องหลังการตั้งชื่อคำสั่งเหล่านี้ แค่บอกคุณว่าพวกเขาทำอะไรไม่ได้ช่วยให้คุณจำชื่อได้
map
คือ "รูท" ของคำสั่งการแม็พแบบเรียกซ้ำทั้งหมด รูปแบบรูทจะใช้กับโหมด "ปกติ", "visual + select" และ "รอดำเนินการ" (ฉันใช้คำว่า "รูต" เหมือนกับภาษาศาสตร์ )
noremap
คือ "รูท" ของคำสั่งการแม็พที่ไม่ใช่แบบเรียกซ้ำทั้งหมด map
รูปแบบรากนำไปใช้กับโหมดเดียวกับ (ลองคิดว่าnore
คำนำหน้าหมายถึง "ไม่ใช่แบบเรียกซ้ำ")
(โปรดทราบว่านอกจากนี้ยังมี!
โหมดเช่นเดียวกับmap!
ที่ใช้กับการแทรก & บรรทัดคำสั่ง)
ดูด้านล่างสำหรับความหมาย "แบบเรียกซ้ำ" ในบริบทนี้
การจัดเตรียมโหมดตัวอักษรเช่นn
แก้ไขโหมดที่การทำแผนที่สามารถเลือกชุดย่อยของรายการโหมดที่ใช้งานได้ (เช่น "ภาพ" เท่านั้น) หรือเลือกโหมดอื่นที่map
ไม่สามารถใช้กับ (เช่น "แทรก")
ใช้help map-modes
จะแสดงตารางไม่กี่ตารางที่อธิบายวิธีควบคุมโหมดที่ใช้ในการทำแผนที่
ตัวอักษรโหมด:
n
: ปกติเท่านั้นv
: ภาพและเลือกo
: รอดำเนินการx
: ภาพเท่านั้นs
: เลือกเท่านั้นi
: ใส่c
: บรรทัดคำสั่งl
: insert, command-line, regexp-search (และอื่น ๆ เรียกว่า "โหมดหลอก" Lang-Arg ")"วนซ้ำ " หมายถึงการทำแผนที่ขยายไปยังผลลัพธ์จากนั้นผลลัพธ์จะขยายไปยังผลลัพธ์อื่นและอื่น ๆ
การขยายจะหยุดลงเมื่อหนึ่งในนั้นเป็นจริง:
ณ จุดนั้น "ความหมาย" เริ่มต้นของ Vim ของผลลัพธ์สุดท้ายจะถูกนำไปใช้ / ดำเนินการ
" ไม่เรียกซ้ำ " หมายถึงการทำแผนที่จะขยายเพียงครั้งเดียวและผลลัพธ์นั้นถูกนำไปใช้ / ดำเนินการ
ตัวอย่าง:
nmap K H
nnoremap H G
nnoremap G gg
สาเหตุดังกล่าวข้างต้นK
ที่จะขยายไปH
แล้วH
จะขยายไปG
และหยุด มันหยุดเพราะเหตุnnoremap
ซึ่งขยายและหยุดทันที ความหมายของG
จะถูกดำเนินการ (เช่น "ข้ามไปยังบรรทัดสุดท้าย") อย่างมากที่สุดการแมปที่ไม่เกิดซ้ำจะถูกนำไปใช้ในห่วงโซ่การขยายตัว (มันจะเป็นการขยายครั้งสุดท้ายที่จะเกิดขึ้น)
การทำแผนที่ของG
ที่จะgg
ใช้เฉพาะถ้าคุณกดแต่ไม่ถ้าคุณกดG
K
การจับคู่นี้ไม่ส่งผลกระทบต่อการกดK
ไม่ว่าจะG
มีการแมปซ้ำหรือไม่เนื่องจากเป็นบรรทัดที่ 2 ที่ทำให้การขยายตัวK
หยุดลงดังนั้นบรรทัดที่ 3 จะไม่ถูกใช้
map
ใช้ได้กับโหมดปกติ, ภาพ, เลือกและโหมดรอดำเนินการเท่านั้นไม่ใช่สำหรับทุกโหมด
สิ่งหนึ่งที่แตกต่างคือ:
:map
ไม่nvo
== + ปกติ (ภาพ + เลือก) + ผู้ประกอบการอยู่ระหว่างดำเนินการ:map!
ทำic
== แทรก + โหมดบรรทัดคำสั่งตามที่ระบุไว้ในhelp map-modes
ตาราง
ดังนั้น: ไม่ได้แมปไปทุกโหมดmap
ต้องการแมโหมดทั้งหมดที่คุณจำเป็นต้องใช้ทั้งและ:map
:map!
command mode
เป็นอีกชื่อทางประวัติศาสตร์สำหรับnormal mode
ได้แก่ chapt 5 vimdoc.sourceforge.net/htmldoc/intro.html#vim-modes-intro ) ตัวย่อ 'c' ใช้สำหรับ 'command-line' กล่าวอีกนัยหนึ่งโดยค่าเริ่มต้น: แผนที่ lhs กับ rhs map! lhs rhs
แบบเรียกซ้ำสำหรับการแทรก + คำสั่งโหมดLINE นั่นคือถ้าremap
ตัวเลือกเริ่มต้นถูกปิดใช้งานอย่างชัดเจนด้วยset noremap[!]
ใน ~ / .vimrc ในกรณีนั้นการทำแผนที่จะไม่เกิดซ้ำ (ไม่แนะนำให้เลือก)
vnoremap
และvmap
ทำงานในโหมด Visual AND Select ที่จะมีการทำแผนที่เฉพาะในโหมดภาพและเสียง, การใช้งานและxmap
xnoremap