如何防止vim创建(和离开)临时文件?


163

为什么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

12
Git将永远不会帮助您在系统崩溃后恢复工作。Git也可以忽略* .swp文件。= D
vmassuchetto 2012年



大声笑有人在发布此问题六年后将其严重标记为重复吗?
哈森

Answers:


78

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

您可以设置交换文件的存储目录,以免它们干扰您的常规目录:

set swapfile
set dir=~/tmp

也可以看看

:help swap-file

4
好吧,我从来没有用过notepad ++,除非您说vim经常崩溃!
hasen

8
不,我并不是说vim崩溃太多(尽管我已经看到它崩溃了)。但是对于我的工作环境,与我正在处理的某些主机的网络连接非常不稳定,因此会中断编辑。交换文件在那里提供帮助。
user55400

9
@ user55400听说过GNU / Screen?(或tmux,或该日本替代品)
Elazar Leibovich

我将此添加到Windows上的_vimrc文件中,但仍在获取文件〜文件。我做错了什么吗?
FilBot3

2
@noircc我建议不要使用/ tmp。万一整个系统崩溃并且您需要重新启动,则交换文件将消失。

56

将其放在您的.vimrc配置文件中。

set nobackup

5
我们已经在Windows 8.1和Vim上做到了这一点。交换文件仍然存在。
Shaun Luttin

1
Shaun,您可能还需要在.vimrc中添加“ set noswapfile”,以防止创建新的交换文件,如对原始问题的编辑所述。
Earl Zedd

:作为set关键字前面的前缀的坐位呢?需要吗?它看起来并不像评论..
斯特凡

@Stephane :前缀意味着它已在命令模式下完成,但是:在编写vimrc时不需要用
TankorSmash

这不是一个好主意。上面将这些文件放在temp /文件夹中的方法已经好得多了。
MonsieurMan

36

; Windows用户返回到temp目录

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

10

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

在这里获取: noswapsuck.vim

它对我来说效果很好,但是我以前从未公开过它,所以我欢迎反馈。

优点:

  • 保留在磁盘上的唯一交换文件将是实际上与文件不同的重要交换文件!

缺点:

  • 如果缓冲区具有交换文件,则在首次打开文件时将不会检测到该文件。仅在swapfile启用时(即您开始编辑缓冲区时)才会检测到它。那太烦人了,会打扰你的。 (已解决:现在,当我们打开缓冲区时,通过swapfile再次临时打开该选项,我们将检查先前是否存在交换文件。)

  • 如果您要在最小化磁盘写入的环境中工作(例如,低功耗,通过网络安装的文件或编辑大文件),则不希望在每个磁盘上都删除并重新创建交换文件,这是不理想的保存并编辑。在这种情况下,您可以执行以下操作:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    写入后将保留交换文件,但是当缓冲区失去焦点时仍将其删除。

顺便说一句,我还有一个小插件:DiffAgainstFileOnDisk,在点击后(r)ecover,它会非常有用,以检查您恢复的缓冲区是否比现有文件新或更旧,或者与之相同。


8

在Windows上,将以下行添加到_vimrc

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

5

此答案适用于在Windows 10上使用gVim。对于其他操作系统,我不能保证相同的结果。

加:

set nobackup
set noswapfile
set noundofile

到您的_vimrc文件。

注意:这是问题的直接答案(对于Windows 10),可能不是最安全的操作(请阅读其他答案),但这是我而言最快的解决方案。


0

我在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.