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


当前回答

这应该只针对每个用户进行,而不是针对每个存储库。如果Joe使用emacs,他希望忽略emacs备份文件,但是Betty(她使用vi)希望忽略vi备份文件(在许多情况下,它们是相似的,但是存在大约24,893个常见的编辑器,试图忽略所有不同的备份扩展名是非常荒谬的)。

换句话说,不要把任何东西放在。gitignore或core中。在$GIT_DIR/config中排除。把信息放在$HOME/。改用Gitconfig(如nonopolonia建议的使用——global。)注意,“全局”指的是每个用户,而不是每个系统。

如果您希望为所有用户在整个系统中进行配置(实际上并不是这样),那么您将需要一种不同的机制。(可能在初始化存储库之前设置模板。)

其他回答

下面是生成交换文件扩展名的实际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自己的gitignore文件VIM。

正如其他人所正确指出的那样,这个.gitignore也会忽略.svg图像文件和.swf adobe flash文件。

如果您正在使用源代码控制。Vim临时文件非常无用。 因此,您可能希望配置vim不创建它们。

只需编辑您的~/。Vimrc并添加这些行:

set nobackup
set noswapfile

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

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

也可以在这里观看。

在“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

正如Alex Moore-Niemi所指出的,这适用于Mac:

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

确保使用TMPDIR而不是TEMPDIR。