git bỏ qua tập tin tạm thời vim


237

Cách chính xác để làm cho git bỏ qua các tệp tạm thời được tạo bởi vim trong tất cả các thư mục (trên toàn cầu trên toàn hệ thống hoặc cục bộ cho một dự án)?


6
Các mẫu *.sw?giải quyết các tiêu chuẩn .swpnhưng cũng là phần mở rộng tập tin trao đổi thay thế như .swo.
buley

7
@buley đề xuất của bạn cũng sẽ bỏ qua .swfcác tập tin. Tôi đặc biệt không khuyến khích làm điều đó, đặc biệt nếu bạn đang xây dựng một ứng dụng Flash.
stephenmurdoch

1
@marflar Điểm tốt. Tuy nhiên, cùng một mẫu có tiền tố với tệp ẩn .sẽ ngăn chặn điều đó.
buley

Tôi thấy một .swx ngày hôm nay quá.
Richard

2
Chương trình thí nghiệm sau khi tạo 16 file sao lưu ( .tmp.swp, .tmp.swo, ..., .tmp.swa), vim tạo .tmp.svz. Tôi thiếu kiên nhẫn để xem những gì đến sau .tmp.saa- có lẽ .tmp.rzz? CẬP NHẬT: Tìm kiếm trong nguồn ( src/memline.c, hàm findswapname()), nó bỏ qua sau khi .saacó lỗi: "E326: Tìm thấy quá nhiều tệp hoán đổi".
Keith Thompson

Câu trả lời:


390

Các tệp tạm thời của Vim kết thúc bằng ~ để bạn có thể thêm vào tệp .gitignoredòng

*~

Vim cũng tạo các tệp hoán đổi có phần mở rộng swp và swo. để loại bỏ những người sử dụng các dòng:

*.swp
*.swo

Điều này sẽ bỏ qua tất cả các tệp tạm thời vim trong một dự án

Nếu bạn muốn thực hiện nó trên toàn cầu, bạn có thể tạo tệp .gitignore trong nhà của mình (bạn có thể đặt tên khác hoặc vị trí) và sử dụng lệnh sau:

git config --global core.excludesfile ~/.gitignore

Sau đó, bạn chỉ cần thêm các tệp bạn muốn bỏ qua vào tệp đó


30
Vim sẽ tạo các tệp hoán đổi được đặt tên liên tiếp (.swp, .swo, v.v.), vì vậy tôi sử dụng .*.sw*trong tôi .gitignoređể ẩn tất cả chúng.
Drew Stephens

32
@DrewStephens, tôi tin .*.sw?là chính xác hơn. (Mặc dù tôi đã thấy mọi người sử dụng một số biến thể *.sw*để nghi ngờ tôi là người thiếu thứ gì đó thực sự rõ ràng ...)
Morten Siebuhr

10
@Morten Theo vimdoc.sourceforge.net/htmldoc/recover.html ,. *. S ?? sẽ bắt tất cả chúng trên Unix (.s ?? decrements từ .swp đến .saa).
Max Nanasy

6
Chỉ cần mở rộng trên @MatrixFrog bình luận tuyệt vời một chút - vì câu hỏi này là dành cho vim, bạn có thể tìm thấy .gitignore chính xác trong dự án đó tại đây .
SnapShot

17
Hãy cẩn thận. github .*.s[a-w][a-z]sẽ bỏ qua .svgcác tập tin.
Jon

118

Ngoài ra, bạn có thể định cấu hình vim để lưu các tệp hoán đổi vào một vị trí riêng biệt, ví dụ: bằng cách thêm các dòng tương tự như sau vào .vimrctệp của bạn :

set backupdir=$TEMP//
set directory=$TEMP//

Xem mẹo vim này để biết thêm.


8
lưu ý, trong Mac OS X, bạn có thể sử dụng $TMPDIRđể lấy tempdir thực tế :)
Alex Moore-Niemi

5
Dấu gạch chéo kép sau thư mục ưa thích của bạn (tôi sử dụng ~ / tmp //) ngăn chặn xung đột đặt tên tệp bằng cách lưu trữ đường dẫn đầy đủ. Theo cách đó, bạn vẫn có thể chỉnh sửa các tệp có tên, ví dụ: config.xml trong hai thư mục cùng một lúc.
Brian

1
$TEMPnghĩa là gì?
quả vào

Lưu ý tôi cũng phải thêm set undodir=$TEMP//, vì tôi cũng lưu các tệp hoàn tác liên tục.
Micah Lindstrom

24

Đây là điều chỉ nên được thực hiện trên cơ sở mỗi người dùng, không phải trên mỗi kho lưu trữ. Nếu Joe sử dụng emacs, anh ta sẽ muốn bỏ qua các tệp sao lưu emacs, nhưng Betty (người sử dụng vi) sẽ muốn các tệp sao lưu vi bị bỏ qua (trong nhiều trường hợp, chúng tương tự nhau, nhưng có khoảng 24.893 trình chỉnh sửa phổ biến tồn tại và nó khá đẹp nực cười khi cố gắng bỏ qua tất cả các phần mở rộng sao lưu khác nhau.)

Nói cách khác, không đặt bất cứ thứ gì vào .gitignorehoặc core.excludesvào $GIT_DIR/config. $HOME/.gitconfigThay vào đó hãy đưa thông tin vào (như nunopolonia gợi ý với --global.) Lưu ý rằng "toàn cầu" có nghĩa là mỗi người dùng, không phải trên mỗi hệ thống.

Nếu bạn muốn cấu hình trên toàn hệ thống cho tất cả người dùng (mà bạn không), bạn sẽ cần một cơ chế khác. (Có thể với thiết lập mẫu trước khi khởi tạo kho lưu trữ.)


3
Rõ ràng, Betty thông minh hơn Joe rất nhiều :-) Lời khuyên tốt và xứng đáng được bình chọn, mặc dù cuối cùng tôi đã sử dụng câu trả lời từ martinl (sửa nó trong Vim chứ không phải Git).
paxdiablo

11

Tôi cũng khuyên bạn nên suy nghĩ để bỏ qua các tập tin như:

.*.swp
.*.swo

như bạn có thể có các tập tin kết thúc bằng .swp


5

Thoát khỏi vim trước khi "git commit".

để vimsử dụng các thư mục khác cho các tệp sao lưu, ( /tmpví dụ):

set bdir-=.
set bdir+=/tmp

để làm cho vim dừng sử dụng thư mục hiện tại cho các tệp .swp:

set dir-=.
set dir+=/tmp

Sử dụng -=, +=thường sẽ tốt, vì vim có các giá trị mặc định khác cho bdir, dir , chúng tôi không muốn xóa tất cả. Kiểm tra trợ giúp vim để biết thêm về bdir, dir :

:h bdir
:h dir

5
Hãy cẩn thận nơi bạn lưu trữ các tập tin trao đổi vim của bạn. Bạn có thể vô tình rò rỉ thông tin đăng nhập hoặc dữ liệu khác từ một tệp bạn đang chỉnh sửa: security.stackexchange.com/questions/65883/ chủ đề
Mnebuerquo

5

Đây là mã VIM thực tế tạo ra các phần mở rộng tệp hoán đổi:

/* 
 * Change the ".swp" extension to find another file that can be used. 
 * First decrement the last char: ".swo", ".swn", etc. 
 * If that still isn't enough decrement the last but one char: ".svz" 
 * Can happen when editing many "No Name" buffers. 
 */
if (fname[n - 1] == 'a')        /* ".s?a" */
{   
    if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
    {   
        EMSG(_("E326: Too many swap files found"));
        vim_free(fname);
        fname = NULL;
        break;  
    }
    --fname[n - 2];             /* ".svz", ".suz", etc. */
    fname[n - 1] = 'z' + 1;
}
--fname[n - 1];                 /* ".swo", ".swn", etc. */

Điều này sẽ tạo ra các tập tin trao đổi định dạng:

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

Đó là khá nhiều những gì được bao gồm trong tệp gitignore của github cho VIM .

Như những người khác đã lưu ý chính xác, .gitignore này cũng sẽ bỏ qua các tệp hình ảnh .svg và các tệp flash adobe .swf .


3

Tôi thấy điều này sẽ có git bỏ qua các tập tin tạm thời được tạo bởi vim:

[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~

Nó cũng có thể được xem ở đây .


5
Nó cũng sẽ bỏ qua những .swftập tin phiền phức cứ xuất hiện bất cứ khi nào bạn tạo một ứng dụng flash.
stephenmurdoch

Hoạt động tốt miễn là bạn không phải là nhà phát triển cần kiểm tra các tệp Flash của mình :-)
paxdiablo

1
Điều này sẽ bỏ qua .svgđó có thể là một vấn đề.
Bruno Bronosky

1
Nó là dư thừa để bao gồm *.un~kể từ khi bạn có*~
Bruno Bronosky

2

chắc chắn rồi,

chỉ cần tạo một ".gitignore" trên thư mục chính của dự án của bạn và phải chứa

*.swp

đó là nó

trong một lệnh

project-home-directory$ echo '*.swp' >> .gitignore

4
Tôi nghĩ echo *.swp >> .gitignoretốt hơn để tránh ghi đè của .gitignore trước đó.
Cesar A. Rivas

2
Bạn không muốn hệ vỏ mở rộng '*'. Vì vậy, hãy sử dụngecho '*.swp' >> .gitignore
Được chỉnh sửa vào

Bạn cũng không muốn vô tình bỏ lỡ một trong những >nhân vật đó. Tôi đã từng làm điều đó với passwdtập tin sau đó đăng xuất :-)
paxdiablo

2
# VIM: Temperory files
*~

# VIM: Swap-files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]

# VIM: Commands :cs, :ctags
tags
cscope.*

# VIM session
Session.vim

# VIM: netrw.vim: Network oriented reading, writing, browsing (eg: ftp scp) 
.netrwhist

Tên của tệp hoán đổi thường giống với tệp bạn đang chỉnh sửa, với phần mở rộng ".swp".

  • Trên Unix, một '.' được dự kiến ​​trao đổi tên tệp trong cùng thư mục với tệp đã chỉnh sửa. Điều này tránh việc tệp hoán đổi hiển thị trong danh sách thư mục.
  • Trên các máy MS-DOS và khi tùy chọn 'shortname' được bật, bất kỳ '.' trong tên tệp gốc được thay thế bằng '_'.
  • Nếu tệp này đã tồn tại (ví dụ: khi bạn đang phục hồi sau sự cố), một cảnh báo được đưa ra và một phần mở rộng khác được sử dụng, ".swo", ".swn", v.v.
  • Một tập tin hiện có sẽ không bao giờ bị ghi đè.
  • Tệp hoán đổi bị xóa ngay sau khi Vim dừng chỉnh sửa tệp.

Việc thay thế '.' với '_' được thực hiện để tránh các sự cố với hệ thống tệp tương thích MS-DOS (ví dụ: crossdos, multidos).

http://vimdoc.sourceforge.net/htmldoc/recover.html

http://www.vim.org/scripts/script.php?script_id=1075


0

Trong trường hợp của tôi, các tệp tạm thời đã được cam kết bởi các hành động trước đó, vì vậy việc sửa đổi .gitignore sẽ không ảnh hưởng đến các tệp được cam kết đó ..., git rm files_to_be_ignored --cachetrước tiên bạn phải cam kết, sau đó thực hiện.


0

Điều này hoạt động trên máy Mac như được lưu ý bởi Alex Moore-Niemi:

set backupdir=$TMPDIR//
set directory=$TMPDIR//

Hãy chắc chắn để sử dụng TMPDIRvà không TEMPDIR.


-4

Nếu bạn đang sử dụng kiểm soát nguồn. tập tin tạm thời vim khá vô dụng.
Vì vậy, bạn có thể muốn cấu hình vim không tạo chúng.

Chỉ cần chỉnh sửa ~ / .vimrc của bạn và thêm các dòng sau:

set nobackup
set noswapfile

6
Kiểm soát nguồn không hoạt động ở cùng mức độ chi tiết như các bản sao lưu hoặc các tệp hoán đổi của Vim. Ngay cả khi bạn đã cam kết sau mỗi lần lưu (hoặc sau một số ký tự hoặc giây nhất định - đơn giản hóa những gì hoán đổi của Vim mang lại cho bạn), vẫn có khả năng cao là bạn có thể muốn chỉnh sửa các tệp không được kiểm soát nguồn (đối với các bản sao lưu và hoán đổi vẫn còn mong muốn).
Chris Johnsen

8
Các tệp tạm thời VIM cực kỳ hữu ích cho các sự cố trình chỉnh sửa và vì một số lý do khác. Tắt chúng là vứt em bé bằng nước tắm.
Brian Riehman

5
@Arni Nói, mất điện? Hoặc có phiên X của bạn chết vì một số lý do. tập tin tạm thời vim là IMO khá quan trọng.
jrdioko

1
Sự cố @jrdioko X là lý do tại sao một người có thể muốn sử dụng screen(hoặc dtachnếu anh ta không muốn tất cả các tính năng màn hình). Mất điện được xử lý bởi UPS. Sao lưu được thực hiện bởi {phần mềm yêu thích của bạn để sao lưu tất cả các tệp quan trọng}. Tôi sử dụng các tệp hoán đổi để được thông báo khi tôi cố gắng chỉnh sửa các tệp đã được chỉnh sửa, sao lưu các tệp vì có vị trí N + 1 với sao lưu không gây hại và hoàn tác các tệp vì hoàn tác liên tục là tiện dụng. Chỉ hoàn tác các tập tin là một chút quan trọng đối với tôi.
ZyX

5
Bạn nên nói với vim để lưu trữ các tệp tạm thời ở nơi khác hơn là tắt chúng hoàn toàn.
Kyle
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.