ความแตกต่างระหว่างคืออะไรremap, noremap, nnoremapและvnoremapคำสั่งการทำแผนที่ในกลุ่ม?
ความแตกต่างระหว่างคืออะไรremap, noremap, nnoremapและvnoremapคำสั่งการทำแผนที่ในกลุ่ม?
คำตอบ:
remapเป็นตัวเลือกที่ทำให้การแมปทำงานซ้ำ โดยค่าเริ่มต้นจะเปิดอยู่และฉันขอแนะนำให้คุณปล่อยไว้อย่างนั้น ส่วนที่เหลือเป็นคำสั่งการจับคู่อธิบายไว้ด้านล่าง:
:mapและ:noremapเป็นเวอร์ชันแบบเรียกซ้ำและไม่ใช่แบบเรียกซ้ำของคำสั่งการแม็พต่างๆ หมายความว่าถ้าคุณทำ:
:map j gg
:map Q j
:noremap W j
jggจะได้รับการแมปไป 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 ที่จะมีการทำแผนที่เฉพาะในโหมดภาพและเสียง, การใช้งานและxmapxnoremap