268

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

4

12 回答 12

429

Vim 临时文件以 ~ 结尾,因此您可以在文件中添加.gitignore该行

*~

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

*.swp
*.swo

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

如果你想全局做,你可以在你家创建一个 .gitignore 文件(你可以给它其他名称或位置),并使用以下命令:

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

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

于 2011-01-28T02:16:39.973 回答
126

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

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

有关更多信息,请参阅此vim 提示

于 2011-01-28T04:15:03.630 回答
28

这应该只在每个用户的基础上完成,而不是每个存储库。如果 Joe 使用 emacs,他会希望忽略 emacs 备份文件,但 Betty(使用 vi)会希望忽略 vi 备份文件(在许多情况下,它们是相似的,但现有大约 24,893 个通用编辑器,而且很漂亮试图忽略所有各种备份扩展是荒谬的。)

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

如果您想为所有用户(您不需要)跨系统进行配置,您将需要不同的机制。(可能在存储库初始化之前使用模板设置。)

于 2011-01-31T11:25:09.323 回答
11

我还建议考虑忽略以下文件:

.*.swp
.*.swo

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

于 2013-10-25T11:56:11.160 回答
7

是生成交换文件扩展名的实际 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 文件。

于 2016-11-29T15:55:25.780 回答
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
于 2012-03-22T08:20:16.833 回答
4
# 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

于 2016-06-25T00:54:56.500 回答
3

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

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

也可以在这里查看。

于 2013-12-30T16:05:54.600 回答
2

当然,

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

*.swp

就是这样

在一个命令中

project-home-directory$ echo '*.swp' >> .gitignore
于 2011-01-28T02:17:26.693 回答
0

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

于 2018-12-18T01:36:48.593 回答
0

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

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

确保使用TMPDIR而不是TEMPDIR.

于 2020-04-15T21:27:17.807 回答
-5

如果您正在使用源代码管理。vim 临时文件毫无用处。
因此,您可能希望将 vim 配置为不创建它们。

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

set nobackup
set noswapfile
于 2011-01-28T02:32:53.227 回答