【问题标题】:Disabling swap files creation in vim在 vim 中禁用交换文件创建
【发布时间】:2010-10-23 17:48:28
【问题描述】:

有没有办法在 vim 中禁用 .swp 文件创建?或者至少在一个地方创建它们,以便我可以轻松找到并删除它们。

当我在编辑的同时复制父目录时,我发现它们特别烦人。当然我知道我可以使用 find -exec 来查找和删除它们。但我想要一个更实际的解决方案。

【问题讨论】:

    标签: vim editor


    【解决方案1】:

    要在 vim 中禁用交换文件,请键入

    :set noswapfile
    

    要永久禁用交换文件,请将以下内容添加到您的 ~/.vimrc 文件中

    set noswapfile
    

    更多详情请见Vim docs on swapfile

    【讨论】:

    • 如果你的编辑器崩溃(停电等),交换文件是好的,请记住。
    • 另一种选择是仍然使用交换文件,但将其保留在内存中,这样就不会一直写硬盘了。这不能保护您在中断期间不会丢失文件,但是如果您在另一个 vim 中打开相同的文件,它会立即告诉您。命令是:set directory=/dev/shm
    • trusktr's answer 允许您在解决 OP 问题的同时保留交换文件的优势。
    • 在 vim 内部,您还可以在打开文件时禁用交换文件::noswapfile edit /path/to/file
    • 我个人关于数据丢失的理念是 DBAB 并经常保存...
    【解决方案2】:

    我找到了答案here

    vim -n <file>
    

    打开没有交换文件的文件。

    另外:

    set dir=/tmp
    

    .vimrc 中创建/tmp 中的交换文件。

    【讨论】:

    • *.ext~ 备份文件呢?是否也有任何命令行选项可以禁用它们?
    • 这对于一次性的大文件非常有用!谢谢。
    【解决方案3】:

    如果您使用的是git,您可以将*.swp 添加到.gitignore

    【讨论】:

    • 我认为这是大多数用户需要的!关闭交换文件是不好的做法。
    【解决方案4】:

    不为特定文件创建 vim 交换文件

    autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile
    

    【讨论】:

    • 或者对于特定目录中的所有文件,以下似乎有效(仅简短测试):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
    【解决方案5】:

    对于任何尝试为 Rails 项目设置此项的人,请添加

    set directory=tmp,/tmp
    

    进入你的

    ~/.vimrc
    

    因此 .swp 文件将位于其自然位置 - tmp 目录(每个项目)。

    【讨论】:

      【解决方案6】:

      在 .vimrc 或 /etc/vimrc 中设置以下变量,使 vim 将交换、备份和撤消文件放在一个特殊的位置,而不是正在编辑的文件的工作目录:

      set backupdir=~/.vim/backup//
      set directory=~/.vim/swap//
      set undodir=~/.vim/undo//
      

      在路径中使用双斜杠告诉 vim 启用避免名称冲突的功能。例如,如果您在一个位置编辑一个文件,而在另一个位置编辑另一个文件,并且这两个文件具有相同的名称,您不希望在 ~/.vim/swap/ 中发生名称冲突。如果你用两个斜杠指定 ~/.vim/swap//,vim 将使用正在编辑的文件的整个路径创建交换文件以避免冲突(文件路径中的斜杠将替换为百分比符号 %)。

      例如,如果您编辑 /path/one/foobar.txt 和 /path/two/foobar.txt,那么您将在 ~/.vim/swap/ 中看到两个名为 %path%one% 的交换文件分别为 foobar.txt 和 %path%two%foobar.txt。

      【讨论】:

      • 您还可以补充一点,有时保存的备份文件可能会保存开发人员皮肤
      • 评论:(不是批评),这似乎主要用于开发,因为对于阅读文件和小编辑或不重要的笔记,这是很多人使用 vim 的很大一部分,这似乎是一个额外的簿记工作最好省略。我个人更喜欢所有工作都没有交换或其他自动备份。如果我真的需要开发一些东西,我宁愿有一个更高级的框架来保护我,最好是代码版本控制等。
      • @LelaDax 没错,大多数时候这些文件大多是无用的,因为我的所有源代码都使用 git。不过,在极少数情况下(比如车祸),它们会派上用场。但实际上,我使用了很多撤消历史。与检查 git 提交以查看以前的历史记录相比,快速导航要容易得多。 gundo 使导航撤消树变得非常容易。不过,我可以不用交换和备份文件。
      • 仅供新手参考(比如我哈哈...)你必须去~/.vim/ 自己创建目录。它不会为您自动创建它们。
      • 你也可以在你的vimrc中写一些代码来自动为你创建文件夹,这就是我在我所做的。所以,在新系统上,我只需要我的 vimrc,剩下的就交给它了。
      【解决方案7】:

      我同意那些质疑为什么 vim 需要所有这些“灾难恢复”的东西而没有其他文本编辑器打扰它的人。我不希望 vim 在编辑文件时在已编辑文件的目录中创建任何额外的文件,非常感谢。为此,我在我的_vimrc 中有这个来禁用交换文件,并将恼人的“备份”文件移动到临时目录:

      " Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
      "set nobackup
      
      " Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
      set backupdir=C:\Windows\Temp
      
      " Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
      set noswapfile
      

      【讨论】:

      • 我认为其他编辑不理会它的事实对其他编辑的影响比对 vi(m) 的影响更大。将相同目录作为放置这些文件的默认位置的选择有点不幸,尽管至少有一点点可辩护。 (例如,在多服务器、高度交叉安装的环境中,在您最迫切需要恢复文件的那一刻,在哪里找到恢复文件可能并不明显)
      • Vim 的交换文件处理非常糟糕。我用它来恢复丢失的数据可能有 5 次。但是我被麻烦地恢复了大约 9,000 次交换文件,无论如何它总是与该文件相同,或者更糟糕的是一个过时的版本。如果恢复过程没有那么糟糕,这可能是一个很好的功能。 recover.vim 有一点帮助,但还是太互动了。
      • Sublime Text 有disaster recovery。我喜欢它!我什至不必保存文件,当我恢复我所做的任何更改时,无论是否保存,都会被拉回。
      • 我有一个简单的自动命令,可以在所有更改完成后立即写入,从而使交换文件和备份都无用。
      • @TorkelBjørnson-Langen 在没有关闭所有 Vim 会话的情况下重新启动我的机器,然后对哪些恢复文件实际上是有效的感到偏执,这可能是我的错。无论如何,我试图通过编写一个仅在有未保存的编辑时维护交换文件的插件来两全其美:vim-swap-is-awesome.vim
      【解决方案8】:

      您可以将 backupdir 和 directory 设置为 null 以完全禁用交换文件,但通常建议将它们简单地放在集中目录中。 Vim 负责确保没有名称冲突或类似的事情;所以,这是一个完全安全的选择:

      set backupdir=~/.vim/backup/
      set directory=~/.vim/backup/
      

      【讨论】:

      • 你应该在路径的末尾添加一个双斜杠//,这样你就可以同时修改两个同名的文件。
      • 谢谢,@SamuelO'Malley。 // 有什么作用?
      • 如果您想阅读相关文档,请查看:help directory。双斜杠告诉 vim 将文件的完整路径编码为交换文件的名称,例如%home%sam%dotfiles%.gitignore.swp,而不仅仅是.gitignore.swp
      【解决方案9】:

      如果您将set directory="" 放入您的exrc 文件中,您将关闭交换文件。但是,这样做会禁用恢复。

      更多信息here

      【讨论】:

        【解决方案10】:

        这是我个人的 ~/.vimrc 备份设置

        " backup to ~/.tmp 
        set backup 
        set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
        set backupskip=/tmp/*,/private/tmp/* 
        set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
        set writebackup
        

        【讨论】:

          猜你喜欢
          • 2015-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-28
          • 2020-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多