git ігнорує тимчасові файли vim


238

Що є правильним способом змусити git ігнорувати тимчасові файли, що створюються vim у всіх каталогах (глобально через систему чи локально для одного проекту)?


6
Шаблон *.sw?вирішує стандартні, .swpале також альтернативні розширення файлів підкачки, як-от .swo.
булей

7
@buley ваша пропозиція також буде ігнорувати .swfфайли. Я настійно не рекомендую це робити, особливо якщо ви створюєте програму Flash.
Stephenmurdoch

1
@marflar Добре. .Однак цей самий шаблон із прихованим файлом повинен перешкоджати.
булей

Я бачив .swx і сьогодні.
Річард

2
Експеримент показує , що після створення 16 файлів резервних копій ( .tmp.swp, .tmp.swo..., .tmp.swa), ВІМ створює .tmp.svz. Мені не вистачає терпіння, щоб побачити, що буде після .tmp.saa- можливо .tmp.rzz? ОНОВЛЕННЯ: Переглядаючи джерело ( src/memline.c, функцію findswapname()), воно .saaвидається після помилки: "E326: Забагато знайдено файлів підкачки".
Кіт Томпсон

Відповіді:


391

Тимчасові файли Vim закінчуються на ~, тому ви можете додати до файлу .gitignoreрядок

*~

Vim також створює файли swap, які мають розширення swp та swo. щоб видалити тих, хто використовує рядки:

*.swp
*.swo

Це ігнорує всі тимчасові файли vim в одному проекті

Якщо ви хочете зробити це в усьому світі, ви можете створити .gitignore файл у своєму будинку (ви можете надати йому інше ім’я чи місцезнаходження) та скористатися такою командою:

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

Тоді вам просто потрібно додати файли, які ви хочете проігнорувати, до цього файлу


30
Vim створить послідовно названі файли swap (.swp, .swo тощо), тому я використовую .*.sw*у своїх, .gitignoreщоб приховати їх усі.
Дрю Стівенс

32
@DrewStephens, я вважаю, .*.sw?що точніше. (Хоча я бачив, як люди використовують якийсь варіант, *.sw*щоб підозрювати, що я пропускаю щось дійсно очевидне ...)
Morten Siebuhr

10
@Morten Згідно з vimdoc.sourceforge.net/htmldoc/recover.html,. *. S ?? спіймав би їх усіх на Unix (декременти .s ?? від .swp до .saa).
Макс Нанасі

6
Просто для розширення на @MatrixFrog чудовий коментар трохи - оскільки це питання для vim, ви можете знайти правильний .gitignore в цьому проекті тут .
SnapShot

17
Будь обережний. github's .*.s[a-w][a-z]ігнорує .svgфайли.
Джон

118

Крім того, ви можете налаштувати vim для збереження свопофілів у окремому місці, наприклад, додавши у .vimrcфайл рядки, схожі на такі :

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

Додаткову інформацію див. У цій підказці vim .


8
зауважте, що в Mac OS X ви можете використовувати $TMPDIRфактичний темпдір :)
Alex Moore-Niemi

5
Подвійний нахил вперед після вибраного каталогу (я використовую ~ / tmp //) запобігає зіткненням імен файлів, зберігаючи повний шлях. Таким чином, ви все ще можете редагувати файли, названі, наприклад, config.xml у двох каталогах одночасно.
Брайан

1
Що $TEMPозначає?
тематичне поле

Примітка. Мені також довелося додати set undodir=$TEMP//, оскільки я також зберігаю стійкі файли скасування.
Міхе Ліндстром

24

Це те, що слід робити лише на основі користувача, а не на сховищі. Якщо Джо використовує emacs, він захоче ігнорувати файли резервного копіювання emacs, але Бетті (яка використовує vi) захоче ігнорувати файли резервних копій vi (у багатьох випадках вони схожі, але існує близько 24,893 поширених редакторів, і це досить смішно намагатися ігнорувати всі різні розширення резервного копіювання.)

Іншими словами, нічого не покласти в .gitignoreабо core.excludesв $GIT_DIR/config. Введіть інформацію $HOME/.gitconfigзамість цього (як це пропонує нунополонія --global.) Зауважте, що "глобальний" означає користувача, а не систему.

Якщо ви хочете конфігурацію в системі для всіх користувачів (яких у вас немає), вам знадобиться інший механізм. (Можливо, із встановленням шаблонів до ініціалізації сховища.)


3
Мабуть, Бетті набагато розумніша за Джо :-) Гарна порада і заслуговує на голосування, навіть якщо я в кінцевому підсумку використовував відповідь від мартінла (виправляючи це в Vim, а не в Git).
paxdiablo

11

Я також рекомендую подумати про ігнорування файлів, таких як:

.*.swp
.*.swo

так як у вас можуть бути файли, які закінчуються .swp


5

Закрийте vim перед "git počin".

щоб vimвикористовувати інші папки для резервних файлів ( /tmpнаприклад):

set bdir-=.
set bdir+=/tmp

щоб змусити vim перестати використовувати поточну папку для .swp файлів:

set dir-=.
set dir+=/tmp

Використання -=, +=було б взагалі добре, тому що vim має інші параметри за умовчанням для bdir, dir , ми не хочемо все очистити. Перегляньте довідку vim, щоб дізнатися більше про bdir, dir :

:h bdir
:h dir

5
Будьте уважні, де ви зберігаєте ваші файли своп-файлів. Ви можете випадково випустити облікові дані та інші дані з файлу, який ви редагуєте: security.stackexchange.com/questions/65883/…
Mnebuerquo

5

Ось власне VIM-код, який генерує розширення файлу своп:

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

Це створить файли swap формату:

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

Це майже все, що включено у власний файл githgnore для VIM .

Як правильно зазначили інші, цей .gitignore також ігнорує .svg файли зображень та .swf Adobe Flash-файли.


3

Я виявив, що це матиме git ігнорування тимчасових файлів, створених vim:

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

Його також можна переглянути тут .


5
Він також ігнорує ті примхливі .swfфайли, які постійно з’являються, коли ви робите флеш-додаток.
stephenmurdoch

Це добре працює, якщо ви не розробник, якому потрібно перевірити свої Flash-файли :-)
paxdiablo

1
Це ігнорує, .svgщо може бути проблемою.
Бруно Броноський

1
Це *.un~*~
зайве,

2

впевнений,

просто потрібно створити ".gitignore" в домашній каталог вашого проекту і повинен містити

*.swp

Це воно

в одній команді

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

4
Я вважаю, echo *.swp >> .gitignoreщо краще уникати перекриття попереднього .gitignore.
Сезар А. Рівас

2
Ви не хочете, щоб оболонка розширювала "*". Отже, використовуйтеecho '*.swp' >> .gitignore
Відредаговано

Ви також не хочете випадково пропустити одного з цих >персонажів. Я колись це робив у passwdфайл, потім вийшов :-)
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

Ім'я файлу swap зазвичай збігається з файлом, який ви редагуєте, з розширенням ".swp".

  • У Unix, '.' призначений для заміни імен файлів у тій самій каталозі, що і відредагований файл. Це дозволяє уникнути відображення файлу swap у списку каталогів.
  • На машинах MS-DOS і коли ввімкнено параметр 'shortname', будь-який '.' в оригінальному імені файлу замінено на "_".
  • Якщо цей файл вже існує (наприклад, коли ви відновлюєтесь після аварії), надається попередження і використовується інше розширення, ".swo", ".swn" тощо.
  • Існуючий файл ніколи не буде перезаписаний.
  • Файл swap видаляється, як тільки Vim перестає редагувати файл.

Заміна "." з '_' робиться, щоб уникнути проблем із сумісними файлами MS-DOS (наприклад, крос-коди, мультидоси).

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

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


0

У моєму випадку тимчасові файли вже скоєні попередніми діями, тому зміна .gitignore не вплине на ці зафіксовані файли ..., git rm files_to_be_ignored --cacheспочатку потрібно, а потім здійснити, а потім ЗРОБИТИ.


0

Це працює на Mac, як зазначив Алекс Мур-Ніємі:

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

Обов’язково використовуйте, TMPDIRа ні TEMPDIR.


-4

Якщо ви використовуєте управління джерелом. Файли temp vim досить марні.
Тому ви можете налаштувати vim не створювати їх.

Просто відредагуйте свій ~ / .vimrc та додайте ці рядки:

set nobackup
set noswapfile

6
Контроль джерела не працює з тією ж деталізацією, як резервне копіювання або підмінами Vim. Навіть якщо ви здійснювали запис після кожного збереження (або після певної кількості символів або секунд - спрощення того, що дає вам свопфіли Vim), все одно велика ймовірність того, що ви можете редагувати файли, які не контролюються джерелом (для яких резервні копії) і swapfiles все ще бажано).
Кріс Джонсен

8
Тимчасові файли VIM надзвичайно корисні для збоїв редактора та з кількох інших причин. Вимкнення їх - викидання дитини з ванною води.
Брайан Ріхман

5
@ Арніс Скажи, відключення електроенергії? Або з вашого X сесії померти з якоїсь причини. Тимчасові файли vim - це досить важливий ІМО.
jrdioko

1
Збій @jrdioko X є причиною, через яку можна захотіти користуватися screen(або dtachякщо він не хоче всіх функцій екрану). Відключення електроенергії справляються з ДБЖ. Резервне копіювання виконується {вашим улюбленим програмним забезпеченням для резервного копіювання всіх важливих файлів}. Я використовую файли swap, щоб отримувати сповіщення, коли я намагаюся редагувати вже відредаговані файли, резервні файли, тому що наявність N + 1-го місця з резервною копією не шкодить і скасовує файли, оскільки стійке скасування зручно. Для мене дещо важливі лише файли скасування.
ZyX

5
Вам краще сказати vim зберігати тимчасові файли в іншому місці, ніж повністю вимикати їх.
Кайл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.