【问题标题】:git ignore vim temporary filesgit 忽略 vim 临时文件
【发布时间】:2011-06-16 23:42:47
【问题描述】:

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

【问题讨论】:

  • 模式*.sw? 解决了标准.swp 以及替代交换文件扩展名,如.swo
  • @buley 您的建议也将忽略.swf 文件。我强烈反对这样做,尤其是在您构建 Flash 应用程序时。
  • @marflar 好点。但是,以隐藏文件 . 为前缀的相同模式应该可以防止这种情况发生。
  • 我今天也看到了.swx。
  • 实验表明,在创建 16 个备份文件(.tmp.swp.tmp.swo,...,.tmp.swa)后,vim 会创建 .tmp.svz。我缺乏耐心去看看.tmp.saa 之后会发生什么——也许是.tmp.rzz更新:查看源代码(src/memline.c,函数findswapname()),它在.saa 之后放弃并出现错误:“E326:找到太多交换文件”。

标签: git vim ignore temporary-files


【解决方案1】:

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

*~

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

*.swp
*.swo

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

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

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

那么你只需要将你想忽略的文件添加到那个文件中

【讨论】:

  • Vim 会创建连续命名的交换文件(.swp、.swo 等),所以我在.gitignore 中使用.*.sw* 将它们全部隐藏。
  • @DrewStephens,我相信.*.sw? 更准确。 (虽然我看到人们使用*.sw* 的一些变体来怀疑我是那个遗漏了一些非常明显的东西的人......)
  • @Morten 根据vimdoc.sourceforge.net/htmldoc/recover.html, .*.s??会在 Unix 上捕获它们(.s?? 从 .swp 减少到 .saa)。
  • 只是为了扩展 @MatrixFrog 的优秀评论 - 因为这个问题是针对 vim 的,所以您可以在该项目中找到正确的 .gitignore here
  • 小心。 github 的 .*.s[a-w][a-z] 将忽略 .svg 文件。
【解决方案2】:

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

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

请参阅此vim tip 了解更多信息。

【讨论】:

  • 注意,在 Mac OS X 中,您可以使用 $TMPDIR 来获取实际的 tempdir :)
  • 首选目录后的双斜杠(我使用 ~/tmp//)通过存储完整路径来防止文件命名冲突。这样,您仍然可以同时在两个目录中编辑名为 config.xml 的文件。
  • $TEMP 是什么意思?
  • 注意我还必须添加set undodir=$TEMP//,因为我还保存了持久的撤消文件。
【解决方案3】:

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

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

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

【讨论】:

  • 显然,Betty 比 Joe 聪明得多 :-) 好建议,值得投票,尽管我最终使用了 martinl 的答案(在 Vim 而不是 Git 中修复它)。
【解决方案4】:

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

.*.swp
.*.swo

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      【讨论】:

      【解决方案7】:
      # 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 停止编辑文件,交换文件就会被删除。

      '.' 的替换with '_' 是为了避免出现问题 MS-DOS 兼容的文件系统(例如,crossdos、multidos)。

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

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

      【讨论】:

        【解决方案8】:

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

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

        也可以查看here

        【讨论】:

        • 它还会忽略那些在你制作 Flash 应用时不断弹出的讨厌的 .swf 文件。
        • 只要您不是需要签入 Flash 文件的开发人员,就可以正常工作 :-)
        • 这将忽略.svg,这可能是个问题。
        • 包含*.un~ 是多余的,因为您有*~
        【解决方案9】:

        当然,

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

        *.swp
        

        就是这样

        在一个命令中

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

        【讨论】:

        • 我认为 echo *.swp >> .gitignore 最好避免覆盖以前的 .gitignore。
        • 您不希望外壳扩展“*”。所以,使用echo '*.swp' >> .gitignore
        • 您也不想意外错过其中一个> 字符。我曾经对passwd 文件这样做然后注销:-)
        【解决方案10】:

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

        【讨论】:

          【解决方案11】:

          正如 Alex Moore-Niemi 所说,这适用于 Mac:

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

          确保使用TMPDIR 而不是TEMPDIR

          【讨论】:

            【解决方案12】:

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

            只需编辑你的 ~/.vimrc 并添加这些行:

            set nobackup
            set noswapfile
            

            【讨论】:

            • 源代码管理与备份或 Vim 的交换文件的粒度不同。即使您在每次保存后提交(或在一定数量的字符或秒后 - Vim 的交换文件给您的简化),您仍然很可能想要编辑不受源代码控制的文件(对于哪些备份和交换文件仍然是可取的)。
            • VIM 临时文件对于编辑器崩溃和其他几个原因非常有用。关掉它们就是把婴儿和洗澡水一起扔出去。
            • @Arnis 说,停电?或者让您的 X 会话因某种原因而死。 vim 临时文件在 IMO 中非常重要。
            • @jrdioko X crash 是人们可能想要使用screen(或者dtach,如果他不想要所有屏幕功能)的原因。停电由 UPS 处理。备份由{您最喜欢的备份所有重要文件的软件}完成。当我尝试编辑已编辑的文件时,我使用交换文件来获得通知,备份文件,因为备份的第 N+1 位不会损害和撤消文件,因为持久撤消很方便。只有撤消文件对我来说有点重要。
            • 你最好告诉 vim 将临时文件存储在别处,而不是完全关闭它们。
            猜你喜欢
            • 1970-01-01
            • 2013-11-18
            • 2016-04-09
            • 1970-01-01
            • 1970-01-01
            • 2020-08-31
            • 2018-08-31
            • 2019-12-09
            • 2016-04-04
            相关资源
            最近更新 更多