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


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.