Git忽略vim临时文件

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

134999 次浏览

Vim临时文件以~结尾,所以你可以在文件中添加.gitignore这一行

*~

Vim还创建了具有swp和swo扩展名的交换文件。要删除这些字符,请使用以下语句:

*.swp
*.swo

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

如果你想全局执行,你可以在家里创建一个.gitignore文件(你可以给它另一个名字或位置),并使用以下命令:

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

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

肯定的是,

只需要创建一个"。Gitignore”在项目的主目录上 并且必须包含

*.swp

就是这样

在一个命令中

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

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

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

set nobackup
set noswapfile
或者,您可以配置vim来保存交换文件到一个单独的位置, 例如,在你的.vimrc文件中添加类似如下的行
set backupdir=$TEMP//
set directory=$TEMP//

更多信息请参见vim提示

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

换句话说,不要在.gitignore$GIT_DIR/configcore.excludes中放入任何东西。将信息放在$HOME/.gitconfig中(如nonopolonia所建议的--global)。注意,“全局”指的是每个用户,而不是每个系统。

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

在“git commit”之前退出vim。

使vim使用其他文件夹作为备份文件(例如/tmp):

set bdir-=.
set bdir+=/tmp

要使vim停止使用当前文件夹的。swp文件:

set dir-=.
set dir+=/tmp

使用-=, +=通常会很好,因为vim对bdir, dir有其他默认值,我们不想全部清除。有关bdir, dir的更多信息,请查看vim帮助:

:h bdir
:h dir

我还建议忽略以下文件:

.*.swp
.*.swo

因为你可能有以.swp结尾的文件

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

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

它也可以被查看在这里

# 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上,a '。'的前缀用于交换与被编辑文件在同一目录下的文件名。这样就避免了交换文件出现在 李目录清单。< / >
  • 在MS-DOS机器上,当'shortname'选项打开时,any '。将原文件名中的“_”替换为“_”。
  • 如果这个文件已经存在(例如,当你从崩溃中恢复时),会给出一个警告,并使用另一个扩展名".swo", ".李swn”等。< / >
  • 现有文件永远不会被覆盖。
  • 一旦Vim停止编辑该文件,交换文件就会被删除。

'的替换。使用'_'来避免使用 兼容MS-DOS的文件系统(例如,crossdos, multidos)。< / p >

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

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

在这里是生成交换文件扩展名的实际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也会忽略.图像文件和. swf adobe flash文件。

在我的情况下,临时文件已经被之前的操作提交了,所以修改.gitignore不会影响那些提交的文件…,你必须先git rm files_to_be_ignored --cache,然后commit,然后DONE。

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

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

确保使用TMPDIR而不是TEMPDIR