실행 취소 기록에서 항목을 제거 할 수 있습니까?


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
실행 취소가 완료된 후에는 실행 취소가 허용되지 않습니다. 그런 다음 실행 취소 항목을 변경할 수 없습니다. 따라서 오류가 나타납니다. 내가 아는 한,이 조건을 확인할 수 없으므로이를 try|catchE790 에 대한 절로 감싸거나 단순히 :sil!경고를 침묵시키는 데 사용할 수 있습니다.
— Christian Brabandt

@ChristianBrabandt 두 기술 사이에 차이점이 있습니까?

그렇습니다, 하나는 입자 오류를 침묵시키고, 다른 하나는 모든 오류를 침묵시킵니다
— Christian Brabandt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.