Tại sao Vim lưu tệp với phần mở rộng ~?


180

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

Tôi giả sử .ext.swptập tin là một bản sao lưu phiên trong trường hợp Vim gặp sự cố. Mục đích của .ext~tập tin là gì? Đây có phải là một tập tin sao lưu vĩnh viễn? 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 vào máy chủ của mình mà không có các bản sao này. Làm thế nào tôi có thể tắt cái này hoặc , nếu nó có lý do chính đáng, ẩn các tập tin ?


Bạn có bất kỳ tập tin mở đồng thời ở nhiều nơi, họ sẽ tạo ra một .ext.swp.
dirkgently

2
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á bận tâm về điều đó khi nó bị xóa khi tôi lưu / đóng cửa sổ.
Ross

Câu trả lời:


221

Các *.ext~tập tin là một tập tin sao lưu, có chứa nội dung tập tin trước khi bạn sửa nó.

Các *.ext.swptập tin là tập tin trao đổi, phục vụ như là một tập tin khóa và chứa lịch sử undo / redo cũng như bất kỳ thông tin nội bộ nhu cầu Vim khác. 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 đó 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 tệp sao lưu, hãy sử dụng (trong vimrc của bạn):

set nobackup
set nowritebackup

Trường hợp nowritebackupthay đổi hành vi "lưu" mặc định của Vim, đó là:

  1. ghi bộ đệm vào tập tin mới
  2. xóa tập tin gốc
  3. đổi tên tập tin mới

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


7
+1 Đối với you prevent "jumping files" on the Windows desktop. Googled và tìm thấy câu trả lời này
Merlyn Morgan-Graham

1
Thật ra - tôi có phải có cả hai nobackupnowritebackupkhông? Có cách nào để viết một bản sao của tập tin như một bản sao lưu, nhưng không thực hiện việc ghi / xóa / đổi tên này không?
Merlyn Morgan-Graham

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

6
Có một bảng mô tả hành vi khác nhau giữa sự kết hợp của các công tắc đó : help backup-table. Hóa ra thiết lập không phải nobackupcũng không nowritebackup, nhưng thay vào đó, cài đặt backupcopy=yescũng giải quyết vấn đề "nhảy". Tuy nhiên, điều này có thể làm tổn thương sự hoàn hảo đối với mỗi người
Merlyn Morgan-Graham

27
Thay vì tắt, hãy sao lưu vào một thư mục set backupdir=~/.vim/backuptrong .vimrc hoặc _vimrc trên windows
tsukimi

224

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

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

Dòng đầu tiên là cho các tập tin sao lưu, dòng thứ hai cho các tập tin trao đổi. Dấu gạch chéo ở cuối đảm bảo rằng không có xung đột trong trường hợp hai tệp có cùng tên, xem các bình luận (tại thời điểm chỉnh sửa này, tùy chọn này chỉ được vinh danh cho các tệp hoán đổi, chưa có tệp sao lưu ). Cho ,.phép vimsử dụng thư mục hiện tại nếu cái trước không tồn tại.

Bạn phải tạo một thư mục trong thư mục chính của bạn được gọi là vimtmp để làm việc này. Ngoài ra, hãy kiểm tra xem các bản sao lưu có được bật trong cấu hình của bạn không (thêm set backupnếu không).

Bằng cách đó bạn có được lợi ích của cả hai thế giới, bạn không phải xem các tệp, nhưng nếu có gì đó bị vô hiệu hóa, bạn có thể lấy tệp sao lưu của mình từ vimtmp. Đừng quên dọn dẹp thư mục mỗi giờ và sau đó.


22
+1 Tôi thực sự có cài đặt của tôi thành ~ / .vim / tmp, nhưng dù sao đi nữa, điều này đã cứu cái mông của tôi hơn một lần.
JC Yamokoski

11
Tại sao bạn cần ,. ở cuối mỗi dòng?
ống quyển

9
@shin Vim sẽ sử dụng thư mục có sẵn đầu tiên, vì vậy trong trường hợp này nếu ~ / vimtmp không tồn tại, nó sẽ sử dụng thư mục làm việc hiện tại
xixixao

3
@SalmanPK Trong một thế giới lý tưởng, bạn không nên chỉnh sửa các tệp cấu hình trực tiếp trên các máy chủ có thể truy cập công khai
Score_Under

12
Sử dụng hai dấu gạch chéo ở cuối đường dẫn. Chẳng hạn, đặt backupdir = ~ / .vim / .backup // - "//" ở cuối thư mục có nghĩa là tên tệp sẽ được tạo từ đường dẫn hoàn chỉnh đến tệp với tất cả các dấu tách đường dẫn được thay thế bằng phần trăm "% " ký tên. Điều này sẽ đảm bảo tính duy nhất của tên tệp trong thư mục bảo quản.
Hacknightly

25

Để 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 dựa trên 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

12
:set nobackup 

sẽ tắt sao lưu. Bạn cũng có thể đặt backupdir nếu bạn vẫn muốn các tệp 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 bị vấy bẩn với ~ tập tin.

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


12

Và bạn cũng có thể thiết lập một tiện ích mở rộng sao lưu khác và nơi lưu các bản sao lưu đó (tôi thích ~/.vimbackupstrên linux). Tôi đã từng sử dụng các bản sao lưu "phiên bản", thông qua:

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

Điều này đặt một phần mở rộng sao lưu động ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).


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

1
Các vim giúp mô tả đầy đủ kỹ thuật này. Xem:help backupext
netjeff

8

Đặt dòng này vào vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


Trong đó sẽ là:

C:\Program Files (x86)\vim\_vimrc

tập tin cho cấu hình vim toàn hệ thống cho tất cả người dùng.

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


Tôi ước Vim có dòng đó theo mặc định. Không ai thích thư mục xấu xí.

Trước tiên, hãy để người dùng chọn nếu và cách cô ấy muốn kích hoạt các tính năng sao lưu / hoàn tác tệp nâng cao.

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

Bước tiếp theo có thể được thiết lập:

set noeb vb t_vb= " errorbells visualbell

để tắt tiếng bíp cũng :-)


Cám ơn bạn rất nhiều về điều này. "Noundofile" là lựa chọn cuối cùng đã thoát khỏi thứ rác rưởi khủng khiếp đó. (Và tôi đồng ý 100% với mọi thứ khác mà bạn đã viết trong bài đăng của mình!)
pwmusic

6

Bạn đã đúng rằng .swptệp được vim sử dụng để khóa và làm tệp khôi phục.

Hãy thử đặt set nobackupvimrc của bạn nếu bạn không muốn các tệp này. Xem tài liệu Vim để 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 sốt dẻo hoặc muốn có tệp .bak thay thế ...


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

5

Tùy chọn duy nhất phù hợp với tôi là đặt dòng này vào tệp ~ / .vimrc của tôi

thiết lập noundofile

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


Điều này cuối cùng đã làm việc cho tôi. Tại sao điều này không được đề cập trong các câu trả lời khác? Thao tác này sẽ xóa các .<filename>.un~tệp : trong khi các tùy chọn khác chỉ xóa các <filename>~tệp.
JLT

0

Tôi đã phải thêm set noundofilevào ~ _gvimrc

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

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.