如何防止vim创建(并留下)临时文件?

198

Vim为什么会创建<filename>~文件?有办法禁用它吗?

如果是为了备份(或其他原因),我使用git。

还有这些.<filename.with.path.hints>.swp文件。

我该如何告诉Vim不要创建这些文件,或者至少在使用后自动清理?

编辑

哎呀,重复了:

为什么Vim会保存带有~扩展名的文件?

我从那里采用了rogeriopvl的答案

直接复制:

set nobackup       "no backup files
set nowritebackup  "only in case you don't want a backup file while editing
set noswapfile     "no swap files

13
系统崩溃后,Git 无法帮助您恢复工作。同时,Git 也可以忽略您的 *.swp 文件。=D - vmassuchetto
3
可能是为什么Vim会用~扩展名保存文件?的重复问题。 - törzsmókus
7个回答

94

我强烈建议继续使用交换文件(以防Vim崩溃)。

您可以设置存储交换文件的目录,以便它们不会混杂在您的常规目录中:

set swapfile
set dir=~/tmp

参见

:help swap-file

4
好吧,我从来没有在Notepad++中需要过那些,除非你说Vim经常崩溃! - hasen
9
不,我并没有暗示vim经常崩溃(虽然我见过它崩溃)。但是对于我工作的环境来说,我在一些主机上的网络连接相当不稳定,因此会发生编辑中断。交换文件可以帮助解决这个问题。 - user55400
9
你听说过GNU/Screen吗?(或者tmux,或者这个日本的替代品) - Elazar Leibovich
4
我建议不要使用 /tmp 目录。如果整个系统崩溃并需要重新启动,您的交换文件将会丢失。 - user1544337
2
问题不在于原帖作者是否应该继续使用它们。 - Aegletes
显示剩余3条评论

65

将此内容放入您的 .vimrc 配置文件中。

set nobackup

7
我们已经在Windows 8.1上使用Vim完成了此操作。交换文件仍然存在。 - Shaun Luttin
2
Shaun,你可能需要在你的 .vimrc 文件中添加 "set noswapfile",以防止新的交换文件被创建,就像原问题的编辑中提到的那样。 - Earl Zedd
:set 关键字前作为前缀是什么意思?这是必须的吗?它看起来不像是注释... - Stephane
@Stephane,:前缀表示在命令模式下完成,但是在编写vimrc时不需要使用: - TankorSmash
这并不是一个好主意。将这些文件放在temp/文件夹中已经更好了。 - MonsieurMan

40

Windows用户返回临时目录的方法

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup

6
我必须添加 set undodir=C:\WINDOWS\Temp - user3378
1
这对我没有用 - 我不得不使用 set dir=$TEMP - Frank Schmitt

19

我在Ubuntu的.vimrc文件中设置了这个。但是我在我的项目文件中没有看到任何交换文件。

set undofile
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

set backup                        " enable backups
set swapfile                      " enable swaps
set undodir=$HOME/.vim/tmp/undo     " undo files
set backupdir=$HOME/.vim/tmp/backup " backups
set directory=$HOME/.vim/tmp/swap   " swap files

" Make those folders automatically if they don't already exist.
if !isdirectory(expand(&undodir))
    call mkdir(expand(&undodir), "p")
endif
if !isdirectory(expand(&backupdir))
    call mkdir(expand(&backupdir), "p")
endif
if !isdirectory(expand(&directory))
    call mkdir(expand(&directory), "p")
endif

其他答案也不错,但这个我最喜欢(几年后发布的)。它可以在多台设备/操作系统上保持组织有序。 - rshdev

15

本回答适用于在Windows 10上使用gVim。我不能保证其他操作系统会产生相同的结果。

添加:

set nobackup
set noswapfile
set noundofile

在你的 _vimrc 文件中。

注:这是对问题的直接回答(针对 Windows 10),可能不是最安全的方法(请阅读其他答案),但在我的情况下,这是最快的解决方案。


14

在Windows上在_vimrc中添加以下行

" store backup, undo, and swap files in temp directory
set directory=$HOME/temp//
set backupdir=$HOME/temp//
set undodir=$HOME/temp//

11

我编写了一个名为“noswapsuck”的插件,它仅在缓冲区包含未保存的更改时启用交换文件。一旦更改已保存,交换文件就会被清除。因此,包含与磁盘上文件相同内容的交换文件将被删除。

在此处获取:noswapsuck.vim

它对我很有效,但我以前从未公开过它,所以我希望得到反馈。

优点:

  • 您计算机上保留的唯一交换文件将是实际与文件不同的重要交换文件!

缺点:

  • 如果缓冲区有交换文件,则在第一次打开文件时将无法检测到它。仅当启用swapfile(即在开始编辑缓冲区时)时才会检测到它。那太晚了,会打断你。(已解决:现在我们会在打开缓冲区时再次临时打开swapfile选项来检查是否存在预先存在的交换文件)

  • 如果您正在追求最小化磁盘写入的环境中工作(例如,低功耗或挂载在网络上的文件,或正在编辑一个巨大的文件),则每次保存和编辑时都将删除并重新创建交换文件并不理想。在这种情况下,您可以执行以下操作:

:let g:NoSwapSuck_CloseSwapfileOnWrite = 0
  • 这将在写入后保留交换文件,但仍会在缓冲区失去焦点时删除它。

  • 顺便说一下,我有另一个小插件:DiffAgainstFileOnDisk,在使用(r)ecover命令后检查恢复的缓冲区是否比现有文件更新、旧或相同非常有用。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接