Vô hiệu hóa tạo tập tin trao đổi trong vim


216

Có cách nào để vô hiệu hóa .swpviệc tạo tập tin trong vim không? hoặc ít nhất là tạo tất cả chúng ở một nơi để tôi có thể tìm và xóa chúng dễ dàng.

Tôi thấy chúng đặc biệt khó chịu khi tôi sao chép thư mục cha trong khi chỉnh sửa cùng một lúc. Tất nhiên tôi biết rằng tôi có thể sử dụng find -exec để tìm và xóa chúng. Nhưng tôi muốn một giải pháp thiết thực hơn.


1

Câu trả lời:


255

Để vô hiệu hóa các tập tin trao đổi từ trong vim, gõ

:set noswapfile

Để vô hiệu hóa các tập tin hoán đổi vĩnh viễn, hãy thêm vào bên dưới vào ~/.vimrctập tin của bạn

set noswapfile

Để biết thêm chi tiết, xem tài liệu Vim trên hoán đổi


6
Các tập tin hoán đổi là tốt nếu trình soạn thảo của bạn gặp sự cố (mất điện, v.v.), chỉ cần ghi nhớ.
koonse

1
Một tùy chọn khác vẫn là sử dụng tệp hoán đổi, nhưng để nó trong bộ nhớ, vì vậy nó sẽ không tiếp tục ghi đĩa cứng. Điều này không thể bảo vệ bạn khỏi mất tập tin trong thời gian ngừng hoạt động, nhưng nếu bạn mở cùng một tập tin trong bao phấn, nó sẽ cho bạn biết ngay lập tức. Lệnh là: set thư mục = / dev / shm
webbertiger

Câu trả lời của trusktr cho phép bạn giữ các lợi thế của các tệp hoán đổi trong khi giải quyết mối quan tâm của OP.
jpaugh

Từ bên trong vim, bạn cũng có thể vô hiệu hóa tệp hoán đổi trong khi mở tệp::noswapfile edit /path/to/file
Torkel Bjørnson-Langen

Triết lý cá nhân của tôi về mất dữ liệu là DBAB và lưu thường xuyên ...
Samy Bencherif

156

Đặt các biến sau trong .vimrc hoặc / etc / vimrc để làm cho vim đặt trao đổi, sao lưu và hoàn tác các tệp ở một vị trí đặc biệt thay vì thư mục làm việc của tệp đang được chỉnh sửa:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

Sử dụng dấu gạch chéo kép trong đường dẫn sẽ cho vim kích hoạt một tính năng trong đó nó tránh được va chạm tên. Ví dụ: nếu bạn chỉnh sửa một tệp ở một vị trí và một tệp khác ở một vị trí khác và cả hai tệp có cùng tên, bạn không muốn xảy ra xung đột tên trong ~ / .vim / exchange /. Nếu bạn chỉ định ~ / .vim / hoán đổi // với hai dấu gạch chéo vim sẽ tạo các tệp hoán đổi bằng cách sử dụng toàn bộ đường dẫn của tệp đang được chỉnh sửa để tránh va chạm (dấu gạch chéo trong đường dẫn của tệp sẽ được thay thế bằng phần trăm ký hiệu%).

Ví dụ: nếu bạn chỉnh sửa /path/one/foobar.txt và /path/two/foobar.txt, thì bạn sẽ thấy hai tệp hoán đổi trong ~ / .vim / exchange / được đặt tên% path% one% foobar.txt và% path% hai% foobar.txt, tương ứng.


Bạn cũng có thể thêm rằng đôi khi các tệp sao lưu đã lưu có thể lưu một giao diện của nhà phát triển
Bartek Skwira

Nhận xét: (không chỉ trích), Điều đó có vẻ tốt chủ yếu để phát triển vì để đọc các tệp và chỉnh sửa nhỏ hoặc lưu giữ ghi chú không quan trọng, đó là một phần lớn của việc sử dụng vim cho nhiều người, có vẻ như là một công việc tăng cường bỏ qua tốt hơn. Cá nhân tôi thích tất cả các công việc không có giao dịch hoán đổi hoặc sao lưu tự động khác. Nếu tôi thực sự cần phát triển một cái gì đó, tôi muốn có một khung công tác cấp cao hơn để bảo vệ tôi, tốt nhất là với kiểm soát phiên bản mã, v.v.
j Riv

@LelaDax Đúng, hầu hết thời gian các tệp này hầu hết đều vô dụng vì tôi sử dụng git cho tất cả mã nguồn của mình. Trong những dịp hiếm hoi (như một vụ tai nạn), chúng đã có ích. Nhưng thật ra, lịch sử hoàn tác tôi sử dụng rất nhiều. Điều hướng dễ dàng hơn nhiều so với việc kiểm tra cam kết git để xem lịch sử trước đó. gundo làm cho nó đẹp và dễ dàng để điều hướng cây hoàn tác. Tôi có thể sống mà không cần trao đổi và sao lưu tập tin.
trusktr

26
Chỉ cần FYI cho những người mới (như tôi haha ​​...) bạn có phải đi đến ~ / .vim / và tự tạo các thư mục. Nó sẽ không tự động tạo chúng cho bạn.
Tháng Tám

1
Bạn cũng có thể viết một số mã trong vimrc để tự động tạo các thư mục cho bạn, đó là những gì tôi đã làm trong phần của mình. Vì vậy, trên các hệ thống mới, tôi chỉ cần lấy vimrc của mình và nó sẽ giải quyết phần còn lại.
trusktr

42

Tôi tìm thấy câu trả lời ở đây :

vim -n <file>

mở tập tin mà không trao đổi.

Ngoài ra:

set dir=/tmp

trong việc .vimrctạo ra các hoán đổi trong /tmp.


Những gì về các *.ext~tập tin sao lưu? Có bất kỳ tùy chọn dòng lệnh để vô hiệu hóa chúng là tốt?
Salman von Abbas

Điều đó rất hữu ích cho những tập tin khổng lồ một lần! Cảm ơn.
Felipe Alvarez

28

đây là cài đặt sao lưu ~ / .vimrc cá nhân của tôi

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup

13

Tôi đồng ý với những người thắc mắc tại sao vim cần tất cả những thứ 'khắc phục thảm họa' này khi không có người chỉnh sửa văn bản nào bận tâm đến nó. Tôi không muốn vim tạo BẤT K file tệp nào trong thư mục của tệp đã chỉnh sửa khi tôi chỉnh sửa nó, cảm ơn bạn rất nhiều. Cuối cùng, tôi có cái này trong_vimrc để vô hiệu hóa các tệp hoán đổi và di chuyển các tệp 'sao lưu' gây khó chịu sang thư mục Temp:

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile

9
Tôi nghĩ rằng thực tế là các biên tập viên khác không bận tâm đến nó phản ánh kém đối với các biên tập viên khác hơn là phản ánh kém đối với vi (m). Lựa chọn đặt cùng thư mục thành vị trí mặc định để đặt các tệp này là một điều không may, mặc dù ít nhất có thể phòng thủ được. (ví dụ: Trong một đa máy chủ, cao chéo gắn môi trường, nó có thể không rõ ràng nơi để tìm một tập tin phục hồi trong thời điểm này khi bạn cần khẩn trương nhất)
Domingo Ignacio

3
Xử lý hoán đổi của Vim chỉ là khủng khiếp. Tôi đã sử dụng nó để khôi phục dữ liệu bị mất có thể 5 lần. Nhưng tôi đã gặp khó khăn trong việc khôi phục một tập tin hoán đổi khoảng 9.000 lần, giống hệt với tập tin, hoặc tệ hơn là một phiên bản lỗi thời. Nó có thể là một tính năng tốt nếu quá trình khôi phục không quá tệ. recovery.vim giúp một chút, nhưng vẫn quá tương tác.
joeytwiddle

3
Văn bản cao siêu có disaster recovery. Tôi thích nó! Tôi thậm chí không phải lưu một tệp, khi tôi tiếp tục bất kỳ thay đổi nào tôi đã thực hiện, đã lưu hay không, sẽ được sao lưu.
leetNightshade

Tôi có một autocommand đơn giản viết tất cả các thay đổi ngay khi chúng được thực hiện, làm cho cả các tệp hoán đổi và sao lưu đều vô dụng.
tbodt

2
@ TorkelBjørnson-Langen Có lẽ là lỗi của tôi khi khởi động lại máy của tôi mà không đóng tất cả các phiên Vim của tôi, và sau đó bị hoang tưởng về việc tập tin khôi phục nào thực sự hợp lệ. Dù sao, tôi đã cố gắng để có được thứ tốt nhất của cả hai thế giới, bằng cách viết một plugin chỉ duy trì một tệp hoán đổi
joeytwiddle

7

Bạn có thể đặt backupdir và thư mục thành null để vô hiệu hóa hoàn toàn các tệp hoán đổi của mình, nhưng thông thường chỉ nên đặt chúng trong một thư mục tập trung. Vim quan tâm đến việc đảm bảo rằng không có tên sưu tập hoặc bất cứ thứ gì tương tự; Vì vậy, đây là một sự thay thế hoàn toàn an toàn:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/

3
Bạn nên thêm một dấu gạch chéo //vào cuối các đường dẫn để bạn có thể sửa đổi hai tệp có cùng tên cùng một lúc.
Samuel O'Malley

Cảm ơn, @ SamuelO'Malley. // làm gì?
đơn sắc

Hãy xem :help directorynếu bạn muốn đọc các tài liệu cho việc này. Dấu gạch chéo đôi bảo vim mã hóa đường dẫn đầy đủ của tệp vào tên tệp hoán đổi, ví dụ %home%sam%dotfiles%.gitignore.swp, thay vì chỉ .gitignore.swp.
Samuel O'Malley

3

Nếu bạn đặt set directory="" tệp exrc của mình, bạn sẽ tắt tệp hoán đổi. Tuy nhiên, làm như vậy sẽ vô hiệu hóa phục hồi.

Thêm thông tin ở đây .


3

Nếu bạn đang sử dụng git, bạn có thể thêm *.swpvào .gitignore.


Tôi nghĩ đó là những gì người dùng cần nhất! Tắt các tập tin trao đổi là thực hành xấu.
DenisKolodin

2

tạo không có tập tin hoán đổi vim chỉ cho một tập tin cụ thể

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile

1
Hoặc đối với tất cả các tệp trong một thư mục cụ thể, các mục sau đây dường như hoạt động (chỉ kiểm tra ngắn):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty

1

Đối với bất kỳ ai đang cố gắng thiết lập điều này cho các dự án Rails, hãy thêm

set directory=tmp,/tmp

vào của bạn

~/.vimrc

Vì vậy, các tệp .swp sẽ ở vị trí tự nhiên của chúng - thư mục tmp (theo dự án).

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.