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

时间:2016-10-15 12:37:49

标签: vim

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

4 个答案:

答案 0 :(得分:1)

这个怎么样?在:wq之前编辑文件后,您可以执行以下操作:

:!cat myfile.txt > backup.txt

然后使用:wq保存。之前的内容将存储在backup.txt

答案 1 :(得分:1)

<强>更新 我意识到我的解决方案对于初学者来说可能有点复杂,对于单个文件备份来说也是不必要的,所以如果你想要一个简单的解决方案,只需使用:

:!cp % ~/ 

%寄存器保留文件的名称,使用此extern命令可以将当前文件复制到主文件夹,或者可以将其更改为所需的任何文件夹。

在Windows中,您可以使用它发送到C ::

上的备份文件夹
:!copy % \backups\ 

您可以使用以下内容输入.vimrc上的快捷方式:

 nnoremap .b  :!cp % ~/

旧答案:

在保存修改之前我有同样的备份需求,因此我创建了一个Bash和一个批处理(用于Windows)文件,备份我想要的所有文件并在.vimrc上使用此条件语句在两者之间自动选择系统:

if has("win32")
    nnoremap <leader>bc :! C:\C\SCRIPTS\backupWIN.bat<cr>
else
    nnoremap <leader>bc :!bash /home/vini/C/SCRIPTS/backup.sh<cr>
endif

这里是Bash版本的代码:

#!/bin/bash

#adds the date to folder(you can change the date format)
now=$(date +"%d_%m_%Y_%H;%M;%S")

mkdir /home/vini/backups/C_BKP/pre_alpha/$now

cp -r /home/vini/C   /home/vini/backups/C_BKP/pre_alpha/$now

echo "saved in: /home/vini/backups/C_BKP/pre_alpha/"$now

这里是批处理文件的代码:

set start=%time%

::I didn't managed to make it print the seconds, so I choose to 
::override the same files if I save twice in the same minute  
@echo off
For /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set mydate=%%a-%%b-%%c)
For /f "tokens=1-4 delims=/:" %%a in ('time /t') do (set mytime=%%ah%%bm%%c)


mkdir C:\Users\vini\Desktop\C\C-%mydate%-%mytime%
::careful with xcopy , read the documentation before modify it 
xcopy /E /Y C:\C C:\Users\vini\Desktop\C\C-%mydate%-%mytime%\

您只需要更改目录名称以匹配您的文件夹即可。

答案 2 :(得分:0)

我只是简单地使用:

:!cp % %.backup

这将在同一位置创建新文件,并在其后附加.backup

答案 3 :(得分:0)

@Sato Katsura pointed out一样,它是patchmode

:set patchmode=.orig