是否可以在 vim 中备份原始文件?

是否可以在 vim 中备份原始文件?

是否可以在将新缓冲区写入文件之前复制原始文件,而不必离开 vim 并手动复制?

答案1

你的意思是你已经对 Vim 中即将要修改的文件做了一些更改:write,但想要备份仍然在磁盘上的原始文件?

您可以直接从 Vim 启动外部 shell 命令。Vim 的:help cmdline-special符号避免对当前文件名进行硬编码,因此您可以轻松地将其转换为自定义映射或命令:

:!cp % %.bak

或者,你可以使用 Vim 的撤消堆栈:首先:earlier 1f使用命令暂时恢复原始文件,:write %.bak然后:later 1f

如果你正在寻找一个完整的备份解决方案,我的writebackupVersionControl 插件也有这样的命令,如:WriteBackupOfSavedOriginal

答案2

是的,我的里面有这个.vimrc

set backup

function! BackupDir()
   if has('win32') || has('win64')
      let l:backupdir=$VIM.'/backup/'.
               \substitute(expand('%:p:h'), '\:', '~', '')
   else
      let l:backupdir=$HOME.'/.vim/backup/'.
               \substitute(expand('%:p:h'), '^'.$HOME, '~', '')
   endif

   if !isdirectory(l:backupdir)
      call mkdir(l:backupdir, 'p', 0700)
   endif

   let &backupdir=l:backupdir
   let &backupext=strftime('~%Y-%m-%d_%H-%M-%S~')
endfunction

autocmd! bufwritepre * call BackupDir()

每次我保存任何文件时,它都会让 Vim 保存一个唯一命名的备份文件。备份保存在~/.vim/backup(在 Linux 上)目录层次结构下,该层次结构复制了原始文件。当我需要备份文件时,很容易找到它。我设置过一次,然后就忘了;我很少需要它(因为通常所有历史记录都保存在 git 中),但当我需要它时,它就是救命稻草。

(顺便说一下,我刚刚检查了我当前的大小~/.vim/backup,在使用该系统约 2 年后,它的大小为 1.3 GB;可能我很快就需要进行清理)

答案3

您尝试设置了patchmode吗?

:h patchmode

如果将其设置为包含文件扩展名,vim 将保存原始文件的备份。

例子:

:set patchmode=.bak

当您保存文件时,例如orig.txt,您将获得两个文件:orig.txt- 保存了新内容。 中的旧内容orig.txt.bak

相关内容