2009-03-03 37 views
149

Tôi đã tìm thấy rằng trong khi sử dụng Vim trên Windows Vim lưu tệp, tệp .ext.swp bị xóa khi đóng cửa sổ Vim và tệp .ext~.Tại sao Vim lưu tệp bằng phần mở rộng ~?

Tôi giả định tệp .ext.swp là bản sao lưu phiên trong trường hợp Vim gặp sự cố. Tuy nhiên, mục đích của tệp .ext~ là gì? Đây có phải là tệp sao lưu vĩnh viễn không? Thật khó chịu khi tôi muốn sao chép tất cả các tệp tôi đang làm việc trên máy chủ lưu trữ của mình mà không có các bản sao này. Làm cách nào để tắt hoặc, nếu có lý do chính đáng, hãy ẩn các tệp?

+0

Bạn có đồng thời mở bất kỳ tệp nào ở nhiều nơi không, chúng sẽ tạo một '.ext.swp'. – dirkgently

+1

dirkgently: Không, ở đây tôi có thể mở một tệp trong cửa sổ vim duy nhất và nó sẽ tạo tệp .swp. Tôi không quá lo lắng về điều đó vì nó bị xóa khi tôi lưu/đóng cửa sổ. – Ross

Trả lời

194

Tệp *.ext~ là tệp sao lưu, chứa tệp như trước khi bạn chỉnh sửa.

Tệp *.ext.swp là tệp hoán đổi, đóng vai trò như tệp khóa và chứa lịch sử hoàn tác/làm lại cũng như bất kỳ thông tin nội bộ nào khác mà Vim cần. Trong trường hợp xảy ra sự cố, bạn có thể mở lại tệp của mình và Vim sẽ khôi phục trạng thái trước đó của nó từ tệp hoán đổi (mà tôi thấy hữu ích, vì vậy tôi không tắt nó).

Để tắt tự động tạo ra các tập tin sao lưu, sử dụng (trong vimrc của bạn):

set nobackup 
set nowritebackup 

đâu nowritebackup thay đổi mặc định "tiết kiệm" hành vi của Vim, đó là:

  1. ghi đệm sang tệp mới
  2. xóa tệp gốc
  3. đổi tên tệp mới

và làm cho Vim ghi bộ đệm vào tệp gốc (dẫn đến nguy cơ phá hủy bộ đệm trong trường hợp lỗi I/O). Nhưng bạn ngăn chặn "nhảy tệp" trên màn hình Windows với nó, đó là lý do chính cho tôi để có nowritebackup tại chỗ.

+7

+1 Đối với 'bạn ngăn chặn' các tệp nhảy "trên màn hình nền của Windows'. Googled và tìm thấy câu trả lời này –

+0

Thực ra - tôi có phải có cả 'nobackup' và' nowritebackup'? Có cách nào để viết một bản sao của tập tin như là một bản sao lưu, nhưng không làm điều này viết/xóa/đổi tên công cụ? –

+0

@Merlyn: Nếu bạn có 'backup' (trái ngược với' nobackup'), thì Vim sẽ tạo một bản sao lưu (tệp '* .ext ~'). Điều này hoàn toàn không liên quan đến 'nowritebackup'. – Tomalak

12
:set nobackup 

sẽ tắt sao lưu. Bạn cũng có thể thiết lập một backupdir nếu bạn vẫn muốn các tập tin sao lưu đó nhưng trong một thư mục trung tâm. Bằng cách này, thư mục làm việc của bạn không được rải rác với ~ tệp.

Bạn tìm thêm thông tin về sao lưu dưới : anh ấy sao lưu.

5

Bạn chính xác rằng tệp .swp được sử dụng bởi vim để khóa và dưới dạng tệp khôi phục.

Thử đặt set nobackup vào vimrc của bạn nếu bạn không muốn các tệp này. Hãy xem the Vim docs để biết các tùy chọn liên quan đến sao lưu khác nhau nếu bạn muốn toàn bộ tin tức, hoặc muốn có các tệp .bak thay thế ...

+0

+1 để đề cập đến mục đích dưới dạng tệp khóa. Tôi không nghĩ về điều đó. – Tomalak

22

Để tắt các tệp đó, chỉ cần thêm các dòng này vào .vimrc (tệp cấu hình vim trên hệ điều hành Unix):

set nobackup  #no backup files 
set nowritebackup #only in case you don't want a backup file while editing 
set noswapfile  #no swap files 
11

Và bạn cũng có thể đặt tiện ích sao lưu khác và nơi lưu các bản sao lưu đó (tôi thích ~/.vimbackups trên Linux).Tôi đã sử dụng bản sao lưu "được phiên bản", qua:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup' 

Điều này đặt tiện ích sao lưu động (ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).

+3

bạn có thể muốn bao gồm cách thiết lập thư mục sao lưu, tức là đặt' set backupdir = ~/.vimbackups' trong ~/.vimrc – rampion

+1

Trợ giúp vim mô tả đầy đủ kỹ thuật này. Xem ': help backupext' – netjeff

190

Tôi nghĩ rằng giải pháp tốt hơn là đặt những dòng này trong tập tin vimrc của bạn

set backupdir=~/vimtmp,. 
set directory=~/vimtmp,. 

Bạn phải tạo một thư mục trong thư mục chính của bạn được gọi vimtmp để làm việc này.

Bằng cách đó bạn có được lợi ích của cả hai thế giới, bạn không cần phải xem các tệp, nhưng nếu có điều gì đó trở nên quá tải, bạn có thể lấy tệp sao lưu từ vimtmp. Đừng quên để làm sạch thư mục ra tất cả bây giờ và sau đó.

+19

+1 Tôi thực sự đã thiết lập của tôi thành ~/.vim/tmp, nhưng một trong hai cách, điều này đã lưu ass của tôi trên nhiều hơn một lần. – jonyamo

+0

Tôi thực sự thích ý tưởng này. – Abel

+9

Tại sao bạn cần,. ở cuối mỗi dòng? – shin

3

Các lựa chọn duy nhất mà làm việc đối với tôi là đưa dòng này trong file ~/vimrc của tôi

bộ noundofile

Các tùy chọn khác đề cập đến tập tin sao lưu không ngăn chặn việc tạo ra các tập tin tạm thời kết thúc trong ~ (dấu ngã)

3

Đặt dòng này vào vimrc của bạn:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile 

trong Windows mà sẽ là C:\Program Files (x86)\vim\_vimrc tệp cho cấu hình vim trên toàn hệ thống cho tất cả người dùng.

Đặt cái cuối cùng noundofile là quan trọng trong Windows để ngăn việc tạo các tệp tilda *~ sau khi chỉnh sửa.


Tôi muốn Vim có dòng đó được bao gồm theo mặc định. Không ai thích thư mục xấu xí.

Cho phép người dùng chọn liệu bạn có muốn bật tính năng sao lưu/hoàn tác nâng cao trước tiên hay không.

Đây là phần khó chịu nhất của Vim.

Bước tiếp theo là thiết lập set noeb vb t_vb= để vô hiệu hóa bíp: P

0

tôi đã có thêm set noundofile tới ~ _gvimrc

Các "~" thư mục có thể được xác định bằng cách thay đổi thư mục với cd ~ lệnh

Các vấn đề liên quan