是否可以在将新缓冲区写入文件之前制作原始文件的副本,而不必离开vim并手动复制它?
答案 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