แสดงประวัติคำสั่งด้วย showcmd


11

เมื่อใช้set showcmdVim แสดงคำสั่งบางส่วนในบรรทัดสุดท้ายของหน้าจอ ตัวอย่างเช่นในโหมดปกติเมื่อพิมพ์คำสั่งdt.บรรทัดสุดท้ายจะแสดงขึ้นdtมาจากนั้นเมื่อคุณกด.คำสั่งเสร็จแล้วจึงไม่มีอะไรปรากฏขึ้น

มีวิธีแสดงคำสั่งแบบเต็มหรือไม่? ตัวอย่างเช่นเมื่อพิมพ์จะแสดงเป็นdt.gU(อันดับแรก dt.และเมื่อเริ่มพิมพ์คำสั่งที่สองคำสั่งแรกจะถูกล้างเพื่อที่ว่าในท้ายที่สุดgU(จะปรากฏเท่านั้น

สิ่งนี้อาจมีประโยชน์เช่นในการแสดงภาพ GIF และเพื่อตรวจสอบว่าคุณพิมพ์สิ่งที่คุณต้องการหากคุณเผชิญกับผลลัพธ์ที่ไม่คาดคิด


1
คำสั่งเต็มคืออะไร? dtจะแสดงเพราะมันเป็นผู้ประกอบการในปัจจุบันอยู่ระหว่างดำเนินการ เมื่อได้รับการเคลื่อนไหวก็ไม่มีผู้ประกอบการที่รอดำเนินการ สมมติว่าเราไปต่อและทำdt.gU(gu)dawเช่นนั้น ทั้งหมดนั้นเป็น "หนึ่งคำสั่งเต็ม" หรือเป็นสี่คำสั่งเต็มหรืออย่างอื่น?
davidlowryduda

@mixedmath สำหรับฉันที่จะนับเป็น 4 คำสั่ง ย่อหน้าที่สองของคำตอบพยายามทำให้เข้าใจผิดในสิ่งที่ฉันหมายถึง
Gonçalo Ribeiro

2
จากมุมมองของ Vim dt.gU(มี 2 ​​คำสั่ง: dt. และgU(.... ดังนั้นสิ่งที่คุณต้องการจริงๆคือแสดงประวัติคำสั่งบางประเภท (Vim แสดงคำว่า "comamnds เต็ม" แล้ว)
Martin Tournoij

@Carpetsmoker ใช่นั่นอาจเป็นสิ่งที่ฉันต้องการ ขอบคุณสำหรับการแก้ไขชื่อคำถาม
Gonçalo Ribeiro

3
ฉันได้รับการจิ้มในกลุ่มรหัสที่มาทำงานในประวัติศาสตร์ปกติ ในsrc/normal.cสายรหัสclear_showcmd()ในหลายสถานที่ ( normal_cmd(), do_pending_operator(), end_visual_mode()) ฉันกำลังเล่นกับการดัมพ์ไปยังไฟล์showcmd_bufที่จุดเหล่านั้นซึ่งดูดี แต่ทำให้ฉันค่อนข้างแน่ใจว่าคุณไม่สามารถได้รับสิ่งที่คุณต้องการโดยไม่ต้องแก้ไขซอร์สโค้ด Vim ในทำนองเดียวกันและสร้างใหม่อีกครั้ง แน่นอนว่าการทำเช่นนั้นอาจคุ้มค่ากับความยุ่งยากในการทำ gif ของคุณ
John O'M

คำตอบ:


9

ฉันไม่สามารถหาวิธีการนี้ใน Vim ปกติ อย่างไรก็ตามหากคุณเต็มใจที่จะแก้ไข Vim สิ่งต่อไปนี้อาจใช้ได้สำหรับคุณ

โปรแกรมแก้ไขที่ง่ายมาก (ใช้กับ Vim-7.4.052) จะปิดใช้งานการปรับปรุงจริงไปยังหน้าจอที่ล้างประวัติเมื่อสิ้นสุดคำสั่งปกติ มันเป็นเช่นนี้โดยการคืนค่าว่าจะshowcmd_is_clearมีการตั้งค่าไว้ก่อนที่จะอัพเดตจอแสดงผลหรือไม่ (หรือคุณสามารถแสดงความคิดเห็นออกมาถ้ามีคำสั่งและออกเพียงหนึ่งเดิมreturnบรรทัด. หมายเหตุ : แพทช์ด้านล่างไม่ได้วางเป็นอย่างดีคุณอาจต้องใช้ด้วยมือแม้ว่ามันจะเป็นเพียงระยะสั้นหนึ่งซับ. ทราบ : ฉันไม่ได้แสดงความคิดเห็นจริงdisplay_showcmd()เพราะดูเหมือนว่าจะใช้ในโหมดภาพเพื่อปรับปรุงการแสดงจำนวนบรรทัดที่เลือกหรือสิ่งอื่น ๆ ที่เป็นไปได้ฉันไม่ได้ทำการทดสอบอย่างกว้างขวาง

--- src/normal.c    2015-02-14 00:21:23.286352257 -0500
+++ src/normal.c    2015-02-14 00:21:25.238352173 -0500
@@ -4029,6 +4029,7 @@
    /* Don't actually display something if there is nothing to clear. */
    if (showcmd_is_clear)
        return;
+   return;
     }

     display_showcmd()

ผลลัพธ์จะเป็นดังนี้:

Screencast แสดงแพทช์

สิ่งที่น่าสนใจที่ควรทราบ:

  • แสดงให้เห็นว่าการเคลื่อนไหวนี้ยังง่ายเช่นj, k, bฯลฯ
  • xคำสั่งกลายเป็นจริงdlใน showcmd_buf
  • คำสั่งที่เปลี่ยนบรรทัดล่างกำจัดพื้นที่ showcmd (ตัวอย่างเช่นใช้:คำสั่งหรือเข้าสู่โหมดแทรก (อย่างน้อยในการตั้งค่าของฉัน))
  • โปรแกรมจับภาพหยุดการบันทึกหลายครั้งหลังจากที่ฉันพิมพ์ a "แต่ลำดับคีย์ของฉันสามารถมองเห็นได้ในหน้าต่าง vim สำหรับการลงทะเบียนยาวของฉันที่ระบุงัด
  • ไม่แสดงในการส่งสัญญาณ แต่การกดปุ่มescในโหมดปกติจะแสดง^[ในพื้นที่ showcmd

4

นอกเหนือจากวิธีแก้ปัญหาของจอห์นยังมีอีกวิธีหนึ่งในการแสดงการกดแป้นพิมพ์ทั้งหมดซึ่งถูกกดโดยใช้-wพารามิเตอร์ซึ่งบันทึกอักขระทั้งหมดที่คุณพิมพ์ในไฟล์ ปัญหาคือ, กลุ่มที่เขียนการกดแป้นพิมพ์เฉพาะเมื่อคุณออกจากกลุ่ม นี่คือวิธีที่VimGolfทำงาน

ในการแก้ไขปัญหานี้Kana Natsuno จึงมาพร้อมกับแพตช์แบบบรรทัดเดียวซึ่งปิดใช้งานการบัฟเฟอร์-wตัวเลือกดังนั้นคุณจึงสามารถเข้าถึงการกดปุ่มแบบเรียลไทม์ จากนั้นเป็นเรื่องของการอ่านพวกเขา (เช่นtail -f) การแยกวิเคราะห์หรือคุณสามารถลองแสดงมันในแถบสถานะ ( :set statusline)

ตรวจสอบงานสร้างแบบกำหนดเองของ Vim โดยใช้สาขา live-stream-keystrokesของ MacVim เพื่อรับกระแสข้อมูลการกดแป้นเรียลไทม์

ที่มา: Vimprint - ตัวแยกการกดแป้นพิมพ์ Vimที่บล็อก Drew Neil

สิ่งนี้มีประโยชน์หากคุณต้องการเปิดเผยการกดปุ่ม Vim ในวิดีโอการสอนหรือ GIF

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