为什么Vim用〜扩展名保存文件?

Ros*_*oss 172 vim

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

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

Tom*_*lak 217

*.ext~文件是一个备份文件,包含编辑之前的文件.

*.ext.swp文件是交换文件,用作锁定文件,包含撤消/重做历史记录以及Vim需要的任何其他内部信息.如果发生崩溃,您可以重新打开文件,Vim将从交换文件中恢复其先前的状态(我觉得这很有帮助,所以我不会将其关闭).

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

set nobackup
set nowritebackup
Run Code Online (Sandbox Code Playgroud)

在哪里nowritebackup更改Vim的默认"保存"行为,即:

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

并使Vim将缓冲区写入原始文件(如果发生I/O错误,则会导致破坏它的风险).但是你可以防止它在Windows桌面上"跳转文件",这是我使用它的主要原因nowritebackup.

  • 而不是关闭,备份到Windows上的.vimrc或_vimrc目录`set backupdir =〜/ .vim/backup` (26认同)
  • +1用于"防止"在Windows桌面上"跳过"文件.用Google搜索并找到了这个答案 (7认同)
  • 有一个表描述了这些开关组合之间的不同行为:`help backup-table`.事实证明既不设置'nobackup`也不设置`nowritebackup`,而是设置`backupcopy = yes`也解决了"跳跃"问题.然而,这可能会伤害穿孔,所以对每个人来说都是如此 (6认同)
  • 实际上 - 我必须同时拥有“nobackup”和“nowritebackup”吗?有没有办法编写文件的副本作为备份,但不执行此写入/删除/重命名操作? (2认同)

use*_*135 215

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

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.
Run Code Online (Sandbox Code Playgroud)

您必须在主目录中创建一个名为vimtmp的目录才能使用此目录.

这样你就可以获得两个世界的好处,你不必看到文件,但如果有什么东西可以得到充分的结果,你可以从vimtmp获取你的备份文件.不要忘记不时地清理目录.

  • +1实际上我的设置为〜/ .vim/tmp,但无论如何,这已经不止一次地保存了我的屁股. (21认同)
  • 在路径的末尾使用两个斜杠.例如,设置backupdir =〜/ .vim/.backup // - 目录末尾的"//"表示将从文件的完整路径构建文件名,并将所有路径分隔符替换为百分比"% " 标志.这将确保保留目录中的文件名唯一性. (12认同)
  • 为什么你需要 ,.在每一行的结尾? (11认同)
  • @shin Vim将使用第一个可用的dir,所以在这种情况下,如果〜/ vimtmp不存在,它将使用当前的工作目录 (8认同)
  • @SalmanPK在理想的世界中,您不应直接在可公开访问的服务器上编辑配置文件 (3认同)
  • 要删除.un~文件,您可以添加:"set undodir =〜/ vimtmp,". (3认同)
  • 如果我编辑`/ foo / bar / a.txt`和`/ foo / baz / a.txt`会怎样?由于基本名称相同,vim会将两个不同的备份文件内容写入相同的备份文件中吗,例如〜/ vimtmp / a.txt〜? (2认同)
  • @Hacknightly,你的答案应该包括在上面. (2认同)
  • @Hacknightly当前有一个已知的[issue](/sf/ask/1871961941/)阻止此解决方案起作用。 (2认同)

rog*_*pvl 24

要关闭这些文件,只需将这些行添加到.vimrc(基于unix的OS上的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
Run Code Online (Sandbox Code Playgroud)


f3l*_*lix 12

:set nobackup 
Run Code Online (Sandbox Code Playgroud)

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

您可以在下面找到有关备份的更多信息:备份.


Zso*_*kai 11

您还可以设置不同的备份扩展以及保存这些备份的位置(我更喜欢~/.vimbackupsLinux).我以前使用"版本化"备份,通过:

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

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

  • 你可能想要包括如何设置备份目录,即在你的〜/ .vimrc中放置`set backupdir =〜/ .vimbackups` (3认同)

小智 8

把这一行放入你的vimrc:

C:\Program Files (x86)\vim\_vimrc
Run Code Online (Sandbox Code Playgroud)

在Windows中,它将成为set nobk nowb noswf noudf所有用户的系统范围vim配置文件.

设置最后一个"在Windows中很重要,以防止nobackup在编辑后创建tilda文件.


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

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

这是Vim最讨厌的部分.

下一步是设置nowritebackup禁用蜂鸣声:P


dwc*_*dwc 6

你是正确的,.swp文件被vim用于锁定和恢复文件.

set nobackup如果您不想要这些文件,请尝试加入您的vimrc.如果你想要整个独家新闻,或者想要拥有.bak文件,请参阅Vim文档了解各种备份相关选项...


小智 5

对我有用的唯一选择是将此行放在我的 ~/.vimrc 文件中

设置无撤销文件

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