ตรวจสอบว่าคีย์ถูกผูกไว้กับบางสิ่งในกลุ่มหรือไม่


89

ฉันต้องการทราบว่ามีวิธีพิจารณาว่าคีย์ทำอะไรเป็นกลุ่มหรือไม่ ฉันรู้ว่าฉันสามารถใช้:mapเพื่อดูการแมปที่ผู้ใช้กำหนดได้ แต่มีบางอย่างสำหรับสิ่งต่างๆในตัวหรือไม่

ตัวอย่างเช่นฉันเคยCTRL- Wผูกไว้เพื่อปิดแท็บเพราะฉันคิดว่ามันไม่ได้ใช้ หลังจากผ่านไปครึ่งปีฉันพบว่ามีลำดับบางอย่างที่ใช้มันเช่นCTRL- W CTRL- Sเพื่อแบ่งหน้าต่างและมันเป็นฝันร้ายที่ต้องฝึกฝนตัวเองใหม่


4
เมื่อพูดถึงการชนกันโดยบังเอิญของการแมปที่กำหนดโดยผู้ใช้การใช้เมเปิ้ลเดอร์
derenio

คำตอบ:



42

ในการตรวจสอบการแมปเริ่มต้น:

:help index

สำหรับการแมปอื่น ๆ ที่ทำโดยผู้ใช้หรือปลั๊กอิน:

:map
:map!

จากhttp://vim.wikia.com/wiki/Mapping_keys_in_Vim_- บทช่วยสอน (Part_1) :

คำสั่งแรกแสดงแผนที่ที่ทำงานในโหมดปกติภาพและเลือกและตัวดำเนินการที่รอดำเนินการ คำสั่งที่สองแสดงแผนที่ที่ทำงานในโหมดแทรกและบรรทัดคำสั่ง

โดยปกติผลลัพธ์ของคำสั่งข้างต้นจะครอบคลุมหลายหน้า คุณสามารถใช้ชุดคำสั่งต่อไปนี้เพื่อเปลี่ยนทิศทางเอาต์พุตไปยังไฟล์ vim_maps.txt:

:redir! > vim_maps.txt
:map
:map!
:redir END

เว้นแต่ว่า Vim เวอร์ชันใหม่กว่าจะเสนอทางเลือกที่ดีกว่านี้ดูเหมือนว่าจะเป็นวิธีเดียวในการค้นหาทั้งคีย์แมปที่รวมและกำหนดเอง mapcheck(ตามที่กล่าวไว้ในคำตอบอื่น ) ยังครอบคลุมเฉพาะคีย์บิวด์ที่กำหนดเองเท่านั้น ความแตกต่างที่สำคัญระหว่างการส่งออกไปยังไฟล์ข้อความและการตรวจสอบแผนที่คือการส่งออกไปยังไฟล์ข้อความและ / หรือการใช้งาน:help indexช่วยให้คุณ/C-wสามารถค้นหาสิ่งต่างๆได้ใน VimC-w
Zoe

34

ไม่ใช่คำตอบที่สมบูรณ์ แต่คุณอาจต้องการตรวจสอบ:help map-which-keysรายการคีย์ที่กลุ่มแนะนำให้คุณใช้ในแผนที่ที่กำหนดเอง

ส่วนความช่วยเหลือนั้นมีคำแนะนำเกี่ยวกับวิธีดูว่าคีย์เฉพาะถูกแมปกับการกระทำหรือไม่


19

ใช้:map!และ:mapสำหรับตั้งค่าคีย์ด้วยตนเองและ:help 'char(-combination)'ค้นหาว่าคีย์ใดที่ถูกแมปไว้แล้วในแบบกลุ่มพร้อมใช้งาน (/ จากตัวเลือกการคอมไพล์เฉพาะของคุณ) (นอกประเด็นเล็กน้อย แต่ยังดูน่าเชื่อถือ (ฉันคิดว่า): ใช้:scriptnamesเพื่อดูว่าไฟล์ใดมาจากลำดับใด)


หากคุณต้องการค้นหาว่าคีย์ใดที่เรียกใช้คำสั่งบางคำคุณสามารถทำได้:: redir keys.txt: map: redir end จากนั้นเปิด keys.txt และค้นหาคำสั่งที่ผูกไว้
Christian Oudard

18

ฉันอ่าน:help indexและทำรายการของnmapคีย์ที่ไม่ได้ใช้:

  • Q (เปลี่ยนเป็นโหมด "Ex")
  • Z ยกเว้น ZZ, ZQ
  • \
  • <Space>(เช่นเดียวกับlในโหมดปกติคีย์ที่ใหญ่ที่สุดและใช้งานน้อยที่สุดในโหมดปกติ)
  • gb, gc, gl, gx, gy, gz
  • gs (นอนหลับ)
  • zp, zq, zu, zy
  • cd, cm, co, cp, cq, cr, cs, cu, cx, cy
  • dc, dm, ทำ, dp, dq, dr, ds, du, dx, dy
  • gA, gB, gC, gG, gK, gL, gM, gO, gS, gX, gY, gZ
  • zB, zI, zJ, zK, zP, zQ, zP, zS, zT, zU, zV, zY, zZ
  • ] a,] b,] e,] g,] h,] j,] k,] l,] n,] o,] q,] r,] t,] u,] v,] w,] x ,] ย
  • [a, [b, [e, [g, [h, [j, [k, [l, [n, [o, [q, [r, [t, [u, [v, [w, [x , [ย
  • CTRL-G, CTRL-K
  • CTRL- \ a - z (สงวนไว้สำหรับส่วนขยาย)
  • CTRL- \ A - Z (ไม่ใช้)

กรุณาปรับปรุง / แสดงความคิดเห็น


12

คุณสามารถใช้ได้ mapcheckใช้ได้: -

ตัวอย่างเช่นผมต้องการที่จะทำแผนที่<CR> ,iเพื่อgg=Gการเยื้องไฟล์ เพื่อตรวจสอบว่ามีการแมปสำหรับ<CR> , i

if mapcheck("\<CR>", "I") == "" |echo "no mapping"

... แต่จะตรวจไม่พบว่าการแมปเป็นส่วนหนึ่งของลำดับหรือไม่


ฉันพยายามตรวจสอบว่า "o" ถูกผูกไว้กับบางสิ่งในโหมดปกติหรือไม่โดยมีสิ่งต่อไปนี้: if mapcheck ("o", "N") == "" | echo "no mapping" แต่จะรายงานว่า "no mapping" เมื่อ o ถูกผูกไว้กับ "open new line" อย่างแน่นอน ฉันใช้ผิดหรือเปล่า?
K. Norbert

@ K.Norbert: ฉันเชื่อว่าสิ่งนี้สำหรับการแมปที่ผู้ใช้กำหนด
Moha อูฐผู้ทรงอำนาจ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.