เป็นไปได้ไหมที่จะลบรายการออกจากประวัติการเลิกทำ?


10

ฉันมีบรรทัดเหล่านี้ใน. vimrc ของฉันเพื่อช่วยในการเยื้อง:

autocmd BufReadPost * set noexpandtab | retab! 4
autocmd BufWritePre * set expandtab | retab! 4
autocmd BufWritePost * set noexpandtab | retab! 4

อย่างไรก็ตามพวกเขาสร้างเสียงดังมากในประวัติศาสตร์การเลิกทำ เนื่องจากพวกเขาไม่ได้ทำอะไรจากมุมมองของผู้ใช้ฉันต้องการลบพวกเขาออกจากประวัติหรืออย่างน้อยก็ต้องกำจัดพวกเขาอย่างใดอย่างหนึ่ง มีวิธีทำเช่นนั้นหรือไม่?


ฉันพยายามทำบางสิ่งเช่นนี้เมื่อไม่นานมานี้ แต่มันไม่ง่ายเลย - คำถามของฉันฉันจะกรองบัฟเฟอร์ไปยังคำสั่งภายนอกในการบันทึกโดยไม่ก่อให้เกิดผลข้างเคียงได้อย่างไร คล้ายกันมาก ข้อสรุปของฉันคือมันเป็นไปไม่ได้จริงๆ
Martin Tournoij

คำตอบ:


5

สำหรับผู้ที่มีปัญหานี้และสงสัยว่าจะแก้ไขได้อย่างไรโดยไม่แจ้งข้อผิดพลาดทั้งหมดนี่คือวิธีที่ฉันทำใน.vimrc:

au BufWritePre * try | undojoin | Neoformat | catch /^Vim\%((\a\+)\)\=:E790/ | endtry

เครดิตไปที่Christian Brabandtและสำหรับคำตอบนี้จาก Randy Morris


ควรสังเกตว่าNeoformatบิตนั้นจำเป็นเฉพาะเมื่อคุณใช้ปลั๊กอิน neoformatและจะทำให้เกิดปัญหาหากคุณไม่มี
8bittree

ใช่แล้วคำสั่งนั้นขึ้นอยู่กับคุณขอบคุณที่ชี้ให้เห็น!
Kjir

Neoformatคำสั่งไม่ควรสิ้นสุด (หรือมากกว่าในfinallyบล็อก)? มิฉะนั้นจะไม่ถูกดำเนินการหาก:undojoinเกิดข้อผิดพลาด
Christian Brabandt

4

ใช้undojoinงานได้ดีจริง ๆ :

autocmd BufReadPost *  undojoin | set noexpandtab | retab! 4
autocmd BufWritePre *  undojoin | set expandtab   | retab! 4
autocmd BufWritePost * undojoin | set noexpandtab | retab! 4

อย่างไรก็ตามหากคุณดำเนินการ:wทันทีหลังจากเลิกทำการกระทำคุณจะได้รับข้อผิดพลาด:

Error detected while processing BufWritePre Auto commands for "*":
E790: undojoin is not allowed after undo
Error detected while processing BufWritePost Auto commands for "*":
E790: undojoin is not allowed after undo

ข้อผิดพลาดนี้สามารถถูกระงับได้โดยใช้silent!ตามที่กล่าวไว้ในความคิดเห็นแต่อาจมีผลข้างเคียงบางอย่างโดยไม่ได้ตั้งใจ:

autocmd BufReadPost *  silent! undojoin | set noexpandtab | retab! 4
autocmd BufWritePre *  silent! undojoin | set expandtab   | retab! 4
autocmd BufWritePost * silent! undojoin | set noexpandtab | retab! 4

2
undojoin ไม่ได้รับอนุญาตหลังจากเลิกทำเสร็จแล้ว คุณไม่สามารถเปลี่ยนรายการเลิกทำเหล่านั้นได้ ดังนั้นคุณจะเห็นข้อผิดพลาด เท่าที่ฉันรู้คุณไม่สามารถตรวจสอบเงื่อนไขนี้ได้ดังนั้นคุณอาจต้องการห่อสิ่งนี้ไว้ในtry|catchประโยคสำหรับ E790 หรือเพียงแค่ใช้:sil!เพื่อปิดเสียงเตือน
Christian Brabandt

@ChristianBrabandt มีความแตกต่างระหว่างสองเทคนิคไหม?

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