Làm thế nào tôi có thể sử dụng undofile?


36

Mục tin tức cuối cùng trên vim.org nói về việc sử dụng 'undofile' để lưu lịch sử của bạn và hoàn tác các thay đổi ngay cả sau khi khởi động lại:

Một tính năng tôi thích sử dụng bản thân không được nhiều người dùng biết đến, như tôi đã tìm thấy vào cuối tuần trước. Bên cạnh việc hoàn tác với nhiều cấp độ như bạn muốn, Vim cũng cung cấp lưu trữ thông tin hoàn tác trong một tệp. Vì vậy, bạn có thể thoát Vim, khởi động lại máy tính của mình và vẫn hoàn tác các thay đổi bạn đã thực hiện. Xem trợ giúp cho 'unofile'. (Bram Moolenaar)

Làm cách nào tôi có thể kích hoạt và sử dụng tính năng này?


2
Bram có lẽ đã nói về sự kiện này
Kurt Pfeifle

Câu trả lời:


37

Phiên bản đơn giản nhất là: tạo ~/.vim/undo-dir/thư mục và thêm các mục sau vào .vimrc:

set undodir=~/.vim/undo-dir
set undofile

Tuy nhiên, nó không hoàn hảo, và tốt hơn là đọc tiếp. Từ riêng tôi .vimrc:

" Let's save undo info!
if !isdirectory($HOME."/.vim")
    call mkdir($HOME."/.vim", "", 0770)
endif
if !isdirectory($HOME."/.vim/undo-dir")
    call mkdir($HOME."/.vim/undo-dir", "", 0700)
endif
set undodir=~/.vim/undo-dir
set undofile

Tôi không muốn làm lộn xộn các thư mục ngẫu nhiên với các tập tin hoàn tác. Vì vậy, tôi đặt undodirtùy chọn, đặt tất cả chúng trong một thư mục hoàn tác. Điều đó gây ra một vấn đề. Tôi lười biếng và không cảm thấy muốn tạo thư mục đó trên tất cả các máy của mình (Tôi sử dụng hệ thống kiểm soát phiên bản để đồng bộ hóa .vimrctrên một loạt các máy). Rất may, thật dễ dàng để Vim kiểm tra và tạo các thư mục nếu chúng không tồn tại.

Cũng lưu ý 0700chế độ trên thư mục hoàn tác (đó là quyền đầy đủ cho chủ sở hữu, không có quyền cho bất kỳ ai khác). Những tập tin nào tôi đã chỉnh sửa, khi nào, v.v. nên ở chế độ riêng tư. Và vì đây là thư mục duy nhất tôi có thể truy cập, tôi không phải lo lắng về việc người khác sẽ đặt liên kết tượng trưng vào đó, hoặc tệp hoàn tác của riêng họ hoặc bất cứ điều gì bạn phải lo lắng khi sử dụng thư mục tạm thời của hệ thống.

Cuối cùng, không phải là một thư mục tạm thời của hệ thống, nó không chịu sự điều chỉnh của chính sách dọn dẹp tempfile hệ thống. Thông thường, đó là khá ngắn một tuần hoặc lâu hơn. Nhưng để giữ cho nó phát triển mãi mãi, tôi đặt những điều sau đây vào crontab:

# m h  dom mon dow   command
 43 00 *   *   3     find /home/anthony/.vim/undo-dir -type f -mtime +90 -delete

Vì vậy, sau 90 ngày không được sửa đổi, họ đã bị xóa. (Thành thật mà nói, chúng không thực sự lớn như vậy, bạn có thể dễ dàng rời khỏi chúng mãi mãi với giá rẻ như thế nào. Nhưng hãy xem xét cả quyền riêng tư của bạn nếu máy của bạn bị xâm phạm.)


Cảm ơn câu trả lời chi tiết @derobert! Tôi biết đây là một câu hỏi cũ, nhưng tôi đã cố gắng đưa ra một cách vimscript để xóa các tập tin vim cũ hoàn tác ( vi.stackexchange.com/questions/16053/ .). Tôi nghĩ sẽ tốt hơn nếu làm theo cách đó, nhưng điều đó chứng tỏ không dễ dàng gì. Bạn đã bao giờ nghĩ đến việc sử dụng một vimscript để xóa các tập tin vim cũ? Nếu không, bạn vẫn sẽ sử dụng crontab trên một vimscript chứ?
Logan

1
@Logan Sử dụng tập lệnh vim sẽ chỉ hoạt động khi vim đang chạy, và nếu có nhiều vims chạy thì sao? Dòng cron đó rất đơn giản, không gặp phải những vấn đề đó và chính xác rõ ràng ...
derobert

Có vẻ như mkdir()chức năng hỗ trợ tạo nhiều cấu trúc thư mục với "p"tùy chọn cho {path}tham số. Vì vậy, kịch bản trên có thể được đơn giản hóa một chút. Sử dụng call mkdir($HOME."/.vim/undo-dir", "p", 0700)công việc cho tôi trong Vim 7.4.160 ít nhất.
jdhao
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.