git忽略vim临时文件

jrd*_*oko 224 git vim ignore temporary-files

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

nun*_*nia 373

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

*~
Run Code Online (Sandbox Code Playgroud)

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

*.swp
*.swo
Run Code Online (Sandbox Code Playgroud)

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

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

git config --global core.excludesfile ~/.gitignore
Run Code Online (Sandbox Code Playgroud)

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

  • Vim将创建连续命名的交换文件(.swp,.swo等),所以我在`.gitignore`中使用`.*.sw*`来隐藏它们. (27认同)
  • @DrewStephens,我相信`.*.sw?`更准确.(虽然我看到人们使用'*.sw*`的某些变体来怀疑我是那个缺少一些非常明显的东西......) (27认同)
  • 小心.github的`.*.s [aw] [az]`将忽略`.svg`文件. (10认同)
  • @Morten根据http://vimdoc.sourceforge.net/htmldoc/recover.html,.*.s ?? 会在Unix上捕获它们(.s ??从.swp减少到.saa). (8认同)
  • 只是为了扩展@MatrixFrog优秀评论 - 因为这个问题是针对vim你可以在那个项目中找到正确的.gitignore [这里](https://github.com/github/gitignore/blob/master/Global/vim的.gitignore). (6认同)
  • 我还建议将用户特定的模式放在`code.excludesfile`指定的文件中(这样每个项目根目录下的`.gitignore`文件只收集项目特定的模式而不是模式,以避免每个模式的临时文件贡献者的宠物平台/编辑/ IDE /无论如何).另外,如果你有可能想要将Git应用到你的主目录,你可能会使用`〜/ .git-user-excludes`来表示`core.excludesfile`,这样`〜/ .gitignore`就可以了用于特定于您的主目录本身的模式. (2认同)
  • 更正了github URL,V是大写的.https://github.com/github/gitignore/blob/master/Global/Vim.gitignore (2认同)

mar*_*inl 111

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

set backupdir=$TEMP//
set directory=$TEMP//
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此vim提示.

  • 请注意,在Mac OS X中,您可以使用`$ TMPDIR`来获取实际的tempdir :) (8认同)
  • 首选目录后面的双正斜杠(我使用〜/ tmp //)通过存储完整路径来防止文件命名冲突.这样,您仍然可以同时编辑两个目录中名为config.xml的文件. (3认同)

Wil*_*ell 23

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

换句话说,不要放任何东西.gitignorecore.excludes$GIT_DIR/config.$HOME/.gitconfig改为放入信息(如nunopolonia建议的那样--global).请注意,"global"表示每个用户,而不是每个系统.

如果您希望为所有用户(您没有)在整个系统中进行配置,则需要使用不同的机制.(可能在初始化存储库之前设置了模板.)

  • 显然,贝蒂比乔聪明得多:-)好的建议和值得投票,尽管我最终使用了马丁的答案(将其修复为Vim而不是Git). (2认同)
  • @Virmundi“防止新人倾倒他们的配置”是一个不同级别的问题,应该由预接收挂钩来处理。(或者至少在人工审查 PR 期间。)用户的无知不能成为存储库混乱的借口。预接收挂钩是一个很好的地方,可以通过简洁的错误消息来教育用户,引导他们查看有关内部策略的适当文档,并解释为什么他们的个人配置不应该出现在存储库中。 (2认同)

Ana*_*dis 10

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

.*.swp
.*.swo
Run Code Online (Sandbox Code Playgroud)

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


rou*_*ble 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. */
Run Code Online (Sandbox Code Playgroud)

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

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]
Run Code Online (Sandbox Code Playgroud)

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

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


And*_*510 5

在"git commit"之前退出vim.

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

set bdir-=.
set bdir+=/tmp
Run Code Online (Sandbox Code Playgroud)

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

set dir-=.
set dir+=/tmp
Run Code Online (Sandbox Code Playgroud)

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

:h bdir
:h dir
Run Code Online (Sandbox Code Playgroud)

  • 在存储vim交换文件的地方要小心.您可能会意外泄漏正在编辑的文件中的凭据或其他数据:http://security.stackexchange.com/questions/65883/what-sensitive-information-can-be-leaked-in-a-vims-swap-file (4认同)

use*_*986 5

# 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
Run Code Online (Sandbox Code Playgroud)

交换文件的名称通常与您正在编辑的文件相同,扩展名为“.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