VIM trao đổi tập tin thực hành tốt nhất?


14

Mỗi khi tôi cắt bỏ một phiên trong vim bằng cách mất kết nối, tôi khá là bị đắm (và tôi vẫn tiếp tục sử dụng vim ... tôi phải là một masochistist) bởi vì khi tôi mở lại các tập tin của mình một đống trao đổi- các tập tin đang chờ để có cơ hội phá hủy công việc của tôi. Các thực hành tốt nhất để làm việc với các tập tin trao đổi vim là gì? Bạn chỉ cần chọn cái mới nhất? Nếu tệp hoạt động theo cách bạn mong đợi, bạn có xóa các tệp hoán đổi không? Làm thế nào để bạn thoát khỏi chúng?


5
Trao đổi tập tin có mặt để bảo vệ công việc của bạn. Xem xét sử dụng màn hình gnu.

1
Tôi không muốn tắt chức năng; nó gây phiền nhiễu nhưng khi bạn nói hữu ích
leeand00

1
Tôi chỉ muốn biết làm thế nào để sử dụng nó đúng cách.
leeand00

2
@DrEval Tôi sử dụng tmux
leeand00

2
Nếu bạn sử dụng tmux, bạn không cần phải lo lắng về việc mất kết nối: chỉ cần gắn lại vào phiên của bạn khi bạn kết nối lại. Bạn cũng có thể quan tâm đến mosh và trong plugin Recover của @ ChristianBrabandt .
Giàu

Câu trả lời:


22

Đừng hoảng sợ!

Khôi phục tập tin luôn an toàn, bởi vì vim không bao giờ viết bất kỳ thay đổi nào cho đến khi bạn tự viết chúng. Vì vậy, phục hồi từ một tập tin trao đổi và sau đó đóng mà không lưu sẽ không thay đổi bất cứ điều gì.

Tổ chức trao đổi của bạn:

Nhận vim để đặt tất cả các tệp hoán đổi của bạn ở cùng một nơi, vì vậy bạn luôn biết chúng ở đâu:

set directory^=$HOME/.vim/swap//

hoặc bất cứ nơi nào bạn thích. Sử dụng //ở cuối tên tệp khiến vim sử dụng đường dẫn tệp tuyệt đối cho tên tệp hoán đổi để bạn không bị va chạm tên. Đảm bảo thư mục tồn tại hoặc vim sẽ không sử dụng nó (nó sẽ không tạo thư mục cho bạn).

Lưu ý: Điều này chỉ hoạt động trên các biến môi trường, nếu bạn muốn sử dụng biến vimscript thì chúng ta cần sử dụng một số :executephép thuật:

execute "set directory^=".my_vim_home_var."/swap//"

Khác biệt:

Trợ giúp của Vim gợi ý một lệnh rất hữu ích để sử dụng trong tình huống này : :DiffOrig. Đây không phải là một lệnh vim mặc định , vì vậy hãy sao chép việc thực hiện từ :h :DiffOrigvào vimrc của bạn. (đó cũng là trong $VIMRUNTIME/defaults.vimnếu bạn có vim8). Bây giờ, bạn có thể khôi phục tệp và chỉ cần chạy DiffOrig để có được một vimdiff về những gì đã thay đổi từ phiên bản chưa sửa đổi.

Nếu bạn muốn so sánh nội dung của nhiều tệp hoán đổi, hãy khôi phục tệp của bạn với từng tệp hoán đổi khác nhau, sau đó ghi kết quả vào các tệp tạm thời. Bây giờ tải lên các tệp và chạy :diffthistrên mỗi tệp, thực hiện các thay đổi bạn muốn, ghi lại vào tệp gốc và xóa các tệp tạm thời và trao đổi.

Các lệnh hữu ích:

:swapname: lấy tên vim đang sử dụng cho tệp hoán đổi cho bộ đệm hiện tại ( :h :swapname) :recover: khôi phục tệp đã chọn, giống như khi bạn bắt đầu vim và nhấn R( :h :recover)

Kiểm tra sự giúp đỡ:

Vim có toàn bộ phần hướng dẫn sử dụng khi khôi phục: Trợ giúp :usr_11.txt
tham chiếu của Vim trên các tệp hoán đổi : :h swap-file, h recovery
Trợ giúp về tùy chọn thư mục (để đặt vị trí tệp hoán đổi)::h 'directory'

Chỉnh sửa: Ví dụ đã sửa đổi để cài đặt thư mục, như được chỉ ra trong các nhận xét của @B Layer


Điều gì về khi bạn kết thúc với nhiều tập tin trao đổi? Bởi vì nhiều kết nối bị mất?
leeand00

1
Tôi đã đề cập rằng trong đoạn thứ hai của "Diff the Difencces". Khi bạn đã sử dụng diffs để xác định những thay đổi bạn muốn xóa tất cả các tệp tạm thời và các tệp hoán đổi cũ bạn đã thực hiện (bây giờ bạn biết tất cả các tệp hoán đổi ở đâu).
flemingfleming

1
FYI, bạn không cần sử dụng exec... set directory^=$HOME/.vim/swap//hoạt động tốt miễn $HOMElà biến môi trường được khởi tạo. Xem :h expand-env. Cũng làm việc với dictionary, undodirbackupdirđể đặt tên một vài.
Lớp B

Cảm ơn đã nhắc nhở tôi về điều đó! Thay vào đó, tôi sử dụng biến vimscript trong cấu hình của mình, do đó, thực thi và quên các biến môi trường không cần điều đó. Nghĩ về nó, có lẽ tôi chỉ nên sử dụng vim để đặt biến môi trường thay thế.
flemingfleming

2

Cá nhân, tôi đã tắt các tập tin trao đổi và sao lưu, vì nó có xu hướng tạo tập tin trao đổi và tập tin sao lưu ở khắp mọi nơi và thường xuyên tạo ra xung đột. Sự kiên trì hoàn tác của Vim đáng tin cậy hơn và không có lỗi.

Vim hiện đang hoàn tác liên tục, đây là một phương pháp sao lưu chi tiết hơn nhiều. Mỗi lần, bạn nhấn Esc, trạng thái hiện tại của tệp sẽ được ghi lại.

Bạn có thể sử dụng :undolisthoặc các plugin như gundo hoặc hoàn tác cây để duyệt lịch sử hoàn tác của bạn.

Để sử dụng vim theo cách này:

  • tạo một thư mục nơi bạn chỉnh sửa lịch sử cho mỗi tệp sẽ được ghi lại
  • nói với vim để sử dụng thư mục đó
  • cho phép hoàn tác liên tục

Trong vỏ:

mkdir ~/.vim/undodir

Trong Vim

set undodir=~/.vim/undodir
set undofile

Để tắt các tập tin trao đổi: :set noswapfile


1
Có một vài vấn đề khá lớn với câu trả lời này. 1. Liên tục hoàn tác giải quyết một vấn đề khác để trao đổi các tệp (và 'writebackup'giải quyết một vấn đề khác). Việc bật liên tục sẽ không được trợ giúp nếu máy tính của bạn gặp sự cố. Bạn có thể lập luận rằng các tệp hoán đổi là không cần thiết vì các lý do khác (tính ổn định của hệ điều hành hiện đại, sự tồn tại của các UPS), nhưng bạn đã không làm như vậy trong câu trả lời này. 2. cài đặt 'undodir' không cho phép hoàn tác liên tục! Bạn cần thiết lập 'undofile'cho điều này
Rich
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.