git忽略vim临时文件


238

使git忽略vim在所有目录中生成的临时文件的正确方法是什么(跨系统全局或单个项目本地)?


6
该模式不仅*.sw?解决了标准问题.swp,还解决了替代交换文件扩展名,例如.swo
buley 2012年

7
@buley,您的建议也将忽略.swf文件。我强烈建议不要这样做,尤其是在构建Flash应用程序时。
stephenmurdoch 2014年

1
@marflar好点。.但是,以隐藏文件为前缀的相同模式应该可以防止这种情况。
buley

我今天也看到了.swx。
理查德

2
实验结果表明,创建16个备份文件后(.tmp.swp.tmp.swo,... .tmp.swa),VIM创建.tmp.svz。我缺乏耐心看接下来发生的事.tmp.saa-也许是.tmp.rzz更新:在源(src/memline.c,function findswapname())中查找时,它放弃.saa并出现错误:“ E326:找到太多交换文件”。
基思·汤普森

Answers:


391

Vim临时文件以〜结尾,因此您可以将以.gitignore下行添加到文件中

*~

Vim还会创建具有swp和swo扩展名的交换文件。删除那些使用以下行:

*.swp
*.swo

这将忽略单个项目中的所有vim临时文件

如果要全局执行此操作,则可以在家庭中创建一个.gitignore文件(可以为其指定其他名称或位置),然后使用以下命令:

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

然后,您只需要将要忽略的文件添加到该文件中


30
Vim会创建一个名为先后交换文件(.SWP,.swo等),所以我用.*.sw*我的.gitignore隐藏它们。
德鲁·史蒂芬斯

32
@DrewStephens,我相信.*.sw?会更准确。(尽管我已经看到人们使用的某种变体*.sw*来怀疑我是缺少真正明显的东西……)
Morten Siebuhr 2011年

10
@Morten根据vimdoc.sourceforge.net/htmldoc/recover.html,。*。s?会在Unix上将它们全部捕获(.s ??从.swp递减到.saa)。
Max Nanasy

6
只是为了扩展@MatrixFrog的出色注释-由于此问题是针对vim的,因此您可以在此处找到该项目中的正确.gitignore 。
SnapShot 2012年

17
小心。github的.*.s[a-w][a-z]将忽略.svg文件。
2013年

118

或者,您可以配置vim以将交换文件保存到单独的位置,例如,通过在.vimrc文件中添加类似于以下内容的行:

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

有关更多信息,请参见此vim技巧


8
请注意,在Mac OS X中,您可以$TMPDIR用来获取实际的温度:)
Alex Moore-Niemi 2015年

5
首选目录后的双斜杠(我使用〜/ tmp //)通过存储完整路径来防止文件命名冲突。这样,您仍然可以同时在两个目录中编辑名为config.xml的文件。
布莱恩(Brian)

1
什么$TEMP意思
主题场'18

注意,我还必须添加set undodir=$TEMP//,因为我还保存了永久的撤消文件。
米卡·林德斯特伦

24

只能基于每个用户而不是每个存储库来执行此操作。如果Joe使用emacs,他将希望忽略emacs备份文件,但是Betty(使用vi)将希望忽略vi备份文件(在许多情况下,它们是相似的,但是存在大约24,893个通用编辑器,这很漂亮试图忽略所有各种备份扩展是荒谬的。)

换句话说,不要放任何东西.gitignorecore.excludes$GIT_DIR/config$HOME/.gitconfig而是放入信息(如nunopolonia用表示--global。)请注意,“全局”是指每个用户,而不是每个系统。

如果要跨系统配置所有用户(不需要),则需要其他机制。(可能在初始化存储库之前使用模板设置。)


3
显然,Betty比Joe聪明得多:-)好的建议和应有的投票权,即使我最终还是使用了martinl的答案(将其固定在Vim中而不是Git中)。
paxdiablo 2015年


5

在“ git commit”之前退出vim。

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
请注意您存放vim交换文件的位置。:你可能会不小心泄露的凭证或其他数据从您正在编辑一个文件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. */

这将生成以下格式的交换文件:

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

几乎是GitHub自己的VIM gitignore文件中包含的内容。

正如其他人正确指出的那样,此.gitignore也将忽略.svg图像文件和.swf Adobe Flash文件。


3

我发现这会让git忽略vim创建的临时文件:

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

也可以在这里查看。


5
.swf每当您制作Flash应用程序时,它也会忽略那些不断弹出的讨厌文件。
stephenmurdoch 2014年

只要您不是需要检入Flash文件的开发人员,
它就

1
这将忽略.svg可能是一个问题。
布鲁诺·布鲁诺斯基

1
*.un~既然有,那么包括在内是多余的*~
Bruno Bronosky

2

当然,

只需在项目的主目录上创建一个“ .gitignore”并包含

*.swp

而已

在一个命令中

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

4
我认为echo *.swp >> .gitignore最好避免覆盖以前的.gitignore。
Cesar A. Rivas

2
您不希望外壳扩展“ *”。因此,请使用echo '*.swp' >> .gitignore
Eddified

您也不想意外地错过其中一个>字符。我曾经对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

交换文件的名称通常与您正在编辑的文件相同,扩展名为“ .swp”。

  • 在Unix上,是“。” 可以在与已编辑文件相同的目录中交换文件名。这样可以避免交换文件显示在目录列表中。
  • 在MS-DOS计算机上,并且当'shortname'选项打开时,任何'。'。原始文件名中的“”替换为“ _”。
  • 如果此文件已经存在(例如,从崩溃中恢复时),则会给出警告并使用另一个扩展名,例如“ .swo”,“。swn”等。
  • 现有文件将永远不会被覆盖。
  • 一旦Vim停止编辑交换文件,该文件将被删除。

替换“。” 使用'_'可以避免与MS-DOS兼容的文件系统(例如,crossdos,multidos)出现问题。

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

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


0

在某些情况下,临时文件已经由先前的操作git rm files_to_be_ignored --cache提交,因此修改.gitignore不会影响这些提交的文件...,您必须先进行然后提交,然后再完成。


0

如Alex Moore-Niemi所说,这可以在Mac上运行:

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

确保使用TMPDIR而不是TEMPDIR


-4

如果您正在使用源代码管理。vim temp文件非常没用。
因此,您可能需要配置vim而不创建它们。

只需编辑您的〜/ .vimrc并添加以下行:

set nobackup
set noswapfile

6
源代码控制的粒度与备份或Vim的交换文件的粒度不同。即使您在每次保存后都进行了提交(或在一定数量的字符或秒钟后进行了提交-简化了Vim的交换文件所提供的内容),您仍然很有可能要编辑非源代码控制的文件(针对哪些备份)和swapfiles仍然是理想的)。
克里斯·约翰森

8
VIM临时文件对于编辑器崩溃和其他一些原因非常有用。关闭它们会把婴儿的洗澡水倒掉。
Brian Riehman 2011年

5
@Arnis说,停电吗?或由于某种原因使您的X会话死亡。vim临时文件对于IMO非常重要。
jrdioko 2011年

1
@jrdioko X崩溃是可能要使用screen(或dtach如果他不想要所有屏幕功能)的原因。停电由UPS处理。备份是通过{您喜欢的用于备份所有重要文件的软件}完成的。当我尝试编辑已经编辑过的文件时,我会使用交换文件来得到通知,因为备份具有第N + 1个位置不会损害和撤消文件,因为持久撤消非常方便,因此可以备份文件。只有撤消文件对我来说有点重要。
ZyX

5
您最好告诉vim将临时文件存储在其他位置,而不是完全关闭它们。
凯尔(Kyle)2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.