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 u
20 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 change
mà 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 change
và tiếp tục lịch sử sau đó (không muốn change
trong lịch sử).
EDIT
Cố gắng rõ ràng hơn: Tôi có một chức năng FF
cậ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 write
sẽ mở một nhánh hoàn tác mới. Tôi đã thử thêm vào undojoin
bê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 SSH
tô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>R
bạn sẽ nhận được thêm 4
. Điều này xảy ra NGAY nếu bạn làm :w
sau mỗi lần <CTRL>R
. Tuy nhiên, nếu mỗi lần bạn :w
thực hiện một thao tác thông qua BufWritePre
, <CTRL>R
sẽ không ghi 3
lạ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ôivi
lệnh hoàn tác lại hoàn tác một lần, và sau đó khi bạn nhấnu
lạ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.