Khi chúng tôi chỉnh sửa một tệp, chúng tôi thường thực hiện nhiều lần UNDO liên tiếp, giả sử, 20 lần. Trong VIM, điều đó thường được thực hiện bằng cách nhấn u20 lần và điều đó làm cho VIM "tăng" trong ngăn xếp lịch sử 20 vị trí. Nếu sau đó bạn chắc chắn change, tất cả 20 lệnh lịch sử cuối cùng sẽ bị mất và được thay thế bằng change. Tôi muốn thực hiện changemà không mất 20 vị trí đó. Vì vậy, tôi đoán rằng tôi muốn nói với VIM ngừng ghi lại lịch sử trước khi tôi làm changevà tiếp tục lịch sử sau đó (không muốn changetrong lịch sử).
EDIT
Cố gắng rõ ràng hơn: Tôi có một chức năng FFcập nhật các dòng cuối cùng của tệp khi bộ đệm được ghi. Vì vậy, nếu tôi thực hiện 20 undos + write, lần cuối cùng writesẽ mở một nhánh hoàn tác mới. Tôi đã thử thêm vào undojoinbên trong FF(cố gắng làm theo gợi ý của jlmg bên dưới), nhưng trình tự viết-hoàn tác ghi lại lỗi: hoàn tác không được phép sau khi hoàn tác . Thay vào đó tôi có thể thực hiện một số thao tác sed ....sau khi rời đi vim, nhưng vì tôi sử dụng điều này thông qua SSHtôi thích một giải pháp chỉ có vim (thực thi một lệnh sau khi dỡ bộ đệm không ghi vào tệp).
EDIT 2 Hãy thử làm điều này trong VIM: mở một tệp trống và làm:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Nếu bây giờ bạn làm một <CTRL>R, VIM sẽ viết lại '3', <CTRL>Rbạn sẽ nhận được thêm 4. Điều này xảy ra NGAY nếu bạn làm :wsau mỗi lần <CTRL>R. Tuy nhiên, nếu mỗi lần bạn :wthực hiện một thao tác thông qua BufWritePre, <CTRL>Rsẽ không ghi 3lại. Và đây là những gì tôi muốn làm, đó là lý do tại sao tôi đã viết để 'đình chỉ gia đình', nhưng có lẽ những gì tôi đang hỏi là không thể, ngoài việc làm việc với đầy đủ undotree().
vim.se, tôi đã thử nó. Dù sao, có vẻ như Sato biết cách giúp đỡ.
sed, nhưng sed không thể hoàn tác, vậy làm thế nào để nó hoạt động? Nếu bạn có thể "tạm dừng lịch sử", bạn sẽ mong đợi hành vi nào của vim khi bạn hoàn tác sau đó? Hành vi duy nhất tôi có thể hình dung là nhóm các thay đổi đó (cùng với hoàn tác) trong một khối hoàn tác, do đó câu trả lời của tôi. Nhưng nếu đó không phải là nó, thì là gì?
vi, nhưng với tôivilệnh hoàn tác lại hoàn tác một lần, và sau đó khi bạn nhấnulại, nó sẽ hoàn tác lại ("làm lại"). Đó là vi thật . Vì vậy, tôi và những người dùng khác của trang web này có thể không biết câu trả lời cho câu hỏi của bạn.