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


188

我发现在Windows上使用Vim时,Vim会保存文件,.ext.swp关闭Vim窗口时会删除该.ext~文件和一个文件。

我假设该.ext.swp文件是会话备份,以防Vim崩溃。该.ext~文件的目的是什么?这是永久备份文件吗?这很烦人,因为我想将正在处理的所有文件复制到主机上,而无需这些重复项。如何关闭此功能,或者,如果有充分的理由,请隐藏文件


您是否同时在多个位置打开了任何文件,它们会创建一个.ext.swp
2009年

2
坦率地说:不,在这里我可以在唯一的vim窗口中打开一个文件,它将创建.swp文件。我不太担心,因为在保存/关闭窗口时将其删除。
罗斯,2009年

Answers:


227

*.ext~文件是备份文件,其中包含编辑前的文件。

*.ext.swp文件是交换文件,它用作锁定文件,包含撤消/重做历史记录以及Vim需要的任何其他内部信息。万一发生崩溃,您可以重新打开文件,Vim将从交换文件中恢复其先前状态(我认为这很有用,因此请不要将其关闭)。

要关闭自动创建备份文件的功能,请使用(在vimrc中):

set nobackup
set nowritebackup

其中nowritebackup更改了Vim的默认“保存”行为,即:

  1. 将缓冲区写入新文件
  2. 删除原始文件
  3. 重命名新文件

并使Vim将缓冲区写入原始文件(导致在I / O错误的情况下有破坏缓冲区的风险)。但是您可以使用它来防止Windows桌面上的“跳转文件”,这是我安装该文件的主要原因nowritebackup


8
+1 you prevent "jumping files" on the Windows desktop。搜索并找到了答案
Merlyn Morgan-Graham

1
实际上-我必须同时拥有nobackupnowritebackup吗?有没有一种方法可以将文件的副本作为备份写入,但是无法执行此写入/删除/重命名操作?
Merlyn Morgan-Graham

@Merlyn:如果有backup(而不是nobackup),则Vim将创建一个备份(*.ext~文件)。这与完全无关nowritebackup
Tomalak

6
下表描述了这些开关组合之间的不同行为:help backup-table。结果既nobackup没有设置,也没有设置nowritebackup,但是设置backupcopy=yes也解决了“跳跃”问题。这可能会伤害PERF,虽然如此,每一个自己
Merlyn摩根-格雷厄姆

30
而不是关闭,而是备份到set backupdir=~/.vim/backupWindows上.vimrc或_vimrc中的目录
tsukimi 2013年

230

我认为更好的解决方案是将这些行放在vimrc文件中

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

第一行用于备份文件,第二行用于交换文件。最后的双斜杠确保在两个文件具有相同名称的情况下不会发生冲突,请参见注释(在进行此编辑时,仅对交换文件支持此选项,而对备份文件不支持)。将,.允许vim使用当前目录,如果前者不存在。

您必须在主目录中创建一个名为vimtmp的目录,此功能才能起作用。另外,请检查配置中是否启用了备份(set backup如果未启用,请添加)。

这样一来,您既可以受益于这两个世界,又不必查看文件,但是如果确实有些麻烦,则可以从vimtmp获取备份文件。不要忘记不时地清理目录。


22
+1我实际上将我的设置为〜/ .vim / tmp,但是无论哪种方式,这都多次挽救了我的屁股。
JC Yamokoski 2011年

11
为什么你需要 ,。在每一行的末尾?
2014年

9
@shin Vim将使用第一个可用的目录,因此在这种情况下,如果〜/ vimtmp不存在,它将使用当前的工作目录
xixixao 2014年

3
@SalmanPK在理想情况下,您不应该直接在可公开访问的服务器上编辑配置文件
Score_Under August

12
在路径的末尾使用两个斜杠。例如,设置backupdir =〜/ .vim / .backup //-目录末尾的“ //”表示将从完整的文件路径构建文件名,所有路径分隔符均替换为百分比“%” “ 标志。这样可以确保保留目录中文件名的唯一性。
Hacknightly,2013年

25

要关闭这些文件,只需将以下行添加到.vimrc(基于unix的操作系统上的vim配置文件):

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
:set nobackup 

将关闭备份。如果您仍需要这些备份文件,但仍在中央文件夹中,则也可以设置一个backupdir。这样,您的工作目录中就不会出现〜文件。

您可以在:he backup下找到有关备份的更多信息。


12

您还可以设置其他备份扩展名以及将这些备份保存到何处(我更喜欢~/.vimbackups在Linux上)。我以前通过以下方式使用“版本化”备份:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

这将设置一个动态备份扩展名(ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup)。


3
您可能想包括如何设置备份目录,即放入set backupdir=~/.vimbackups〜/ .vimrc

1
vim帮助全面介绍了该技术。参见:help backupext
netjeff 2011年

10

将此行放入您的vimrc

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


那将是:

C:\Program Files (x86)\vim\_vimrc

所有用户的全系统vim配置文件。

noundofile在Windows中设置最后一个很重要,这样可以防止*~在编辑后创建tilda文件。


我希望Vim默认包含该行。没有人喜欢丑陋的目录。

让用户选择是否以及如何先启用高级备份/撤消文件功能。

这是Vim最烦人的部分。

下一步可能是设置:

set noeb vb t_vb= " errorbells visualbell

禁用蜂鸣 以及:-)


非常感谢你做的这些!“ noundofile”是最终摆脱了令人讨厌的垃圾的选择。(我同意100%同意您在帖子中写的所有其他内容!)
pwmusic

6

您是正确的,.swpvim使用该文件进行锁定并用作恢复文件。

set nobackup如果您不需要这些文件,请尝试放入vimrc。如果您想了解整个备份,或者想改用.bak文件,请参见Vim文档以获取各种与备份相关的选项。


+1表示作为锁定文件的目的。我没想到。
Tomalak

5

对我有用的唯一选择是将这一行放入我的〜/ .vimrc文件中

设置noundofile

引用备份文件的其他选项不会阻止以〜(波浪号)结尾的临时文件的创建


这终于对我有用。为什么在其他答案中没有提及?这将删除:.<filename>.un~文件,而其他选项仅删除<filename>~文件。
JLT

0

我必须添加set noundofile到〜_gvimrc

可以通过使用以下cd ~命令更改目录来标识“〜”目录

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.