git abaikan file sementara vim

238

Apa cara yang benar untuk membuat git mengabaikan file sementara yang diproduksi oleh vim di semua direktori (baik secara global di seluruh sistem atau secara lokal untuk satu proyek)?

jrdioko
sumber
6
Pola ini *.sw?memecahkan standar .swptetapi juga ekstensi file swap alternatif seperti .swo.
buley
7
@buley saran Anda juga akan mengabaikan .swffile. Saya akan sangat menyarankan melakukan hal itu, terutama jika Anda sedang membangun aplikasi Flash.
stephenmurdoch
1
@marflar Poin bagus. Namun, pola yang sama yang diawali dengan file tersembunyi .harus mencegahnya.
buley
Saya melihat .swx hari ini juga.
Richard
2
Percobaan menunjukkan bahwa setelah menciptakan 16 file backup ( .tmp.swp, .tmp.swo, ..., .tmp.swa), vim menciptakan .tmp.svz. Saya kurang sabar untuk melihat apa yang terjadi setelahnya .tmp.saa- mungkin .tmp.rzz? UPDATE: Mencari di sumber ( src/memline.c, fungsi findswapname()), menyerah setelah .saadengan kesalahan: "E326: Terlalu banyak file swap ditemukan".
Keith Thompson

Jawaban:

392

Vim file sementara diakhiri dengan ~ sehingga Anda dapat menambahkan file .gitignoreke baris tersebut

*~

Vim juga membuat file swap yang memiliki ekstensi swp dan swo. untuk menghapus yang menggunakan baris:

*.swp
*.swo

Ini akan mengabaikan semua file sementara vim dalam satu proyek

Jika Anda ingin melakukannya secara global, Anda dapat membuat file .gitignore di rumah Anda (Anda dapat memberikannya nama atau lokasi lain), dan gunakan perintah berikut:

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

Maka Anda hanya perlu menambahkan file yang ingin Anda abaikan ke file itu

nunopolonia
sumber
30
Vim akan secara berturut-turut menamai file swap (.swp, .swo, dll.), Jadi saya gunakan .*.sw*di saya .gitignoreuntuk menyembunyikan semuanya.
Drew Stephens
32
@DrewStephens, saya yakin .*.sw?lebih akurat. (Meskipun saya telah melihat orang menggunakan beberapa varian *.sw*untuk mencurigai saya yang kehilangan sesuatu yang sangat jelas ...)
Morten Siebuhr
10
@Morten Menurut vimdoc.sourceforge.net/htmldoc/recover.html ,. *. S ?? akan menangkap mereka semua di Unix (the .s ?? decrements dari .swp ke .saa).
Max Nanasy
6
Hanya untuk memperluas sedikit komentar di @ MatrixFrog - karena pertanyaan ini adalah untuk vim Anda dapat menemukan .gitignore yang benar dalam proyek itu di sini .
SnapShot
17
Hati-hati. github .*.s[a-w][a-z]akan mengabaikan .svgfile.
Jon
118

Atau Anda dapat mengkonfigurasi vim untuk menyimpan swapfiles ke lokasi terpisah, misalnya dengan menambahkan baris yang mirip dengan yang berikut ke .vimrcfile Anda :

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

Lihat tip vim ini untuk info lebih lanjut.

martinl
sumber
8
perhatikan, di Mac OS X, Anda dapat menggunakan $TMPDIRuntuk mendapatkan tempdir yang sebenarnya :)
Alex Moore-Niemi
5
Garis miring ganda setelah direktori pilihan Anda (saya menggunakan ~ / tmp //) mencegah tabrakan penamaan file dengan menyimpan path lengkap. Dengan begitu, Anda masih dapat mengedit file bernama, misalnya, config.xml di dua direktori secara bersamaan.
Brian
1
Apa $TEMPartinya
themefield
Catatan saya juga harus menambahkan set undodir=$TEMP//, karena saya juga menyimpan file undo yang persisten.
Micah Lindstrom
24

Ini adalah sesuatu yang seharusnya hanya dilakukan berdasarkan per-pengguna, bukan per-repositori. Jika Joe menggunakan emacs, ia akan ingin agar file cadangan emacs diabaikan, tetapi Betty (yang menggunakan vi) ingin file cadangan vi diabaikan (dalam banyak kasus, mereka mirip, tetapi ada sekitar 24.893 editor umum yang ada dan itu cukup konyol untuk mencoba mengabaikan semua berbagai ekstensi cadangan.)

Dengan kata lain, jangan memasukkan apa pun ke dalam .gitignoreatau ke core.excludesdalam $GIT_DIR/config. Masukkan info $HOME/.gitconfigsebagai gantinya (seperti yang disarankan nunopolonia dengan --global.) Perhatikan bahwa "global" berarti per-pengguna, bukan per-sistem.

Jika Anda ingin konfigurasi lintas sistem untuk semua pengguna (yang tidak Anda miliki), Anda akan memerlukan mekanisme yang berbeda. (Mungkin dengan pengaturan templat sebelum inisialisasi repositori.)

William Pursell
sumber
3
Rupanya, Betty jauh lebih pintar daripada Joe :-) Nasihat yang bagus dan pantas mendapatkan suara, meskipun saya akhirnya menggunakan jawaban dari martinl (memperbaikinya dalam Vim daripada Git).
paxdiablo
11

Saya juga merekomendasikan untuk berpikir untuk mengabaikan file seperti:

.*.swp
.*.swo

karena Anda mungkin memiliki file yang diakhiri dengan .swp

Anastasios Andronidis
sumber
5

Berhenti vim sebelum "git commit".

untuk vimmenggunakan folder lain untuk file cadangan, ( /tmpmisalnya):

set bdir-=.
set bdir+=/tmp

untuk membuat vim berhenti menggunakan folder saat ini untuk file .swp:

set dir-=.
set dir+=/tmp

Penggunaan -=, +=akan secara umum baik, karena vim memiliki standar lain untuk bdir, dir , kami tidak ingin menghapus semua. Periksa bantuan vim untuk informasi lebih lanjut tentang bdir, dir :

:h bdir
:h dir
Andrew_1510
sumber
5
Hati-hati di mana Anda menyimpan file swap vim Anda. Anda dapat secara tidak sengaja membocorkan kredensial atau data lain dari file yang sedang Anda edit: security.stackexchange.com/questions/65883/…
Mnebuerquo
5

Berikut adalah kode VIM aktual yang menghasilkan ekstensi file swap:

/* 
 * 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. */

Ini akan menghasilkan file swap format:

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

Yang cukup banyak apa yang termasuk dalam file gitignore github sendiri untuk VIM .

Seperti orang lain telah mencatat dengan benar, .gitignore ini juga akan mengabaikan file gambar .svg dan file .swf adobe flash.

rubel
sumber
3

Saya menemukan ini akan membuat git mengabaikan file sementara yang dibuat oleh vim:

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

Itu juga bisa dilihat di sini .

Foto
sumber
5
Ini juga akan mengabaikan .swffile - file sial yang terus muncul setiap kali Anda membuat aplikasi flash.
stephenmurdoch
Yang berfungsi dengan baik selama Anda bukan pengembang yang perlu memeriksa file Flash Anda :-)
paxdiablo
1
Ini akan mengabaikan .svgyang mungkin menjadi masalah.
Bruno Bronosky
1
Itu berlebihan untuk dimasukkan *.un~karena Anda memiliki*~
Bruno Bronosky
2

Tentu,

cukup buat ".gitignore" di direktori home proyek Anda dan harus mengandung

*.swp

itu dia

dalam satu perintah

project-home-directory$ echo '*.swp' >> .gitignore
forellana
sumber
4
Saya pikir echo *.swp >> .gitignorelebih baik untuk menghindari penggantian .gitignore sebelumnya.
Cesar A. Rivas
2
Anda tidak ingin shell memperluas '*'. Jadi, gunakanecho '*.swp' >> .gitignore
Eddified
Anda juga tidak ingin melewatkan salah satu >karakter itu secara tidak sengaja . Saya pernah melakukan itu pada passwdfile kemudian keluar :-)
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

Nama file swap biasanya sama dengan file yang Anda edit, dengan ekstensi ".swp".

  • Di Unix, a '.' didahulukan untuk menukar nama file dalam direktori yang sama dengan file yang diedit. Ini menghindari bahwa file swap muncul di daftar direktori.
  • Pada mesin MS-DOS dan ketika opsi 'shortname' aktif, any '.' dalam nama file asli diganti dengan '_'.
  • Jika file ini sudah ada (misalnya, ketika Anda memulihkan dari kerusakan) peringatan diberikan dan ekstensi lain digunakan, ".swo", ".swn", dll.
  • File yang ada tidak akan pernah ditimpa.
  • File swap dihapus segera setelah Vim berhenti mengedit file.

Penggantian '.' dengan '_' dilakukan untuk menghindari masalah dengan sistem file yang kompatibel dengan MS-DOS (misalnya, crossdos, multidos).

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

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

pengguna31986
sumber
0

Dalam kasus saya file temporer sudah dilakukan oleh tindakan sebelumnya, jadi memodifikasi .gitignore tidak akan mempengaruhi file yang dikomit ..., Anda harus git rm files_to_be_ignored --cacheterlebih dahulu, kemudian komit, kemudian DILAKUKAN.

dwwolf
sumber
0

Ini berfungsi pada Mac seperti dicatat oleh Alex Moore-Niemi:

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

Pastikan untuk menggunakan TMPDIRdan tidak TEMPDIR.

Kekuasaan
sumber
-4

Jika Anda menggunakan kontrol sumber. vim temp file tidak berguna.
Jadi, Anda mungkin ingin mengonfigurasi vim untuk tidak membuatnya.

Cukup edit ~ / .vimrc Anda dan tambahkan baris ini:

set nobackup
set noswapfile
Arnis Lapsa
sumber
6
Kontrol sumber tidak beroperasi pada rincian yang sama dengan cadangan atau swapfile Vim. Sekalipun Anda berkomitmen setelah setiap penyimpanan (atau setelah sejumlah karakter atau detik - penyederhanaan yang diberikan swapfile Vim kepada Anda), kemungkinan besar Anda ingin mengedit file yang tidak dikontrol sumber (yang cadangannya dan swapfile masih diinginkan).
Chris Johnsen
8
File sementara VIM sangat berguna untuk crash editor dan karena beberapa alasan lainnya. Mematikannya adalah membuang bayi dengan air mandi.
Brian Riehman
5
@Arnis Say, pemadaman listrik? Atau membiarkan sesi X Anda mati karena alasan tertentu. vim temp file adalah IMO yang cukup penting.
jrdioko
1
@jrdioko X crash adalah alasan mengapa seseorang mungkin ingin menggunakan screen(atau dtachjika dia tidak ingin semua fitur layar). Pemadaman listrik ditangani oleh UPS. Pencadangan dilakukan oleh {perangkat lunak favorit Anda untuk mencadangkan semua file penting}. Saya menggunakan swap file untuk mendapatkan pemberitahuan ketika saya mencoba untuk mengedit file yang sudah diedit, file cadangan karena memiliki tempat N + 1 dengan cadangan tidak membahayakan dan membatalkan file karena persistent membatalkan berguna. Hanya undo file yang sedikit penting bagi saya.
ZyX
5
Anda lebih baik memberitahu vim untuk menyimpan file temp di tempat lain daripada sepenuhnya mematikannya.
Kyle