Có thể xóa một mục từ lịch sử hoàn tác?


10

Tôi có những dòng này trong .vimrc để giúp thụt lề:

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

Tuy nhiên, chúng tạo ra rất nhiều tiếng ồn trong lịch sử hoàn tác. Vì về cơ bản chúng không làm được gì từ quan điểm của người dùng, tôi muốn xóa chúng khỏi lịch sử hoặc ít nhất là đè bẹp chúng bằng cách nào đó (có lẽ chúng sẽ hủy bỏ nếu bị đè bẹp cùng nhau?). Có cách nào để làm vậy không?


Tôi đã cố gắng làm một cái gì đó như thế này một thời gian trước đây, nhưng nó không dễ dàng như vậy - câu hỏi của tôi Làm thế nào tôi có thể lọc một bộ đệm cho một lệnh bên ngoài để lưu mà không gây ra bất kỳ tác dụng phụ nào? rất giống nhau Kết luận của tôi là nó không thực sự có thể.
Martin Tournoij

Câu trả lời:


5

Đối với những người có vấn đề này và tự hỏi làm thế nào để khắc phục nó mà không làm im lặng tất cả các lỗi, đây là cách tôi đã làm nó trong .vimrc:

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

Tín dụng cho Christian Brabandtcâu trả lời này từ Randy Morris


Có lẽ nên lưu ý rằng Neoformatbit chỉ cần thiết nếu bạn đang sử dụng plugin neoformat và sẽ gây ra sự cố nếu bạn không có nó.
8bittree

Vâng, lệnh là tùy thuộc vào bạn, cảm ơn bạn đã chỉ ra nó!
Kjir

Không nên Neoformatlệnh đến ở cuối (hay đúng hơn là trong một finallykhối)? Nếu không, nó sẽ không được thực thi nếu :undojoinném lỗi.
Christian Brabandt

4

Sử dụng undojointhực sự hoạt động khá tốt:

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

Tuy nhiên, nếu bạn thực thi :wngay sau khi hoàn tác một hành động, bạn sẽ gặp lỗi:

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

Lỗi này có thể bị tắt tiếng silent!khi sử dụng như được đề cập trong các bình luận , nhưng có thể có một số tác dụng phụ không chủ ý:

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 không được phép sau khi hoàn tác đã hoàn thành. Bạn không thể thay đổi những mục hoàn tác sau đó. Do đó bạn thấy lỗi. Theo như tôi biết, ở đó bạn không thể kiểm tra điều kiện này, vì vậy bạn có thể muốn bọc điều này thành một try|catchmệnh đề cho E790 hoặc chỉ đơn giản là sử dụng :sil!để tắt tiếng cảnh báo.
Christian Brabandt

@ChristianBrabandt Có sự khác biệt giữa hai kỹ thuật không?

vâng, người ta im lặng một lỗi particula, người kia im lặng mọi lỗi
Christian Brabandt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.