每当我因失去连接而退出vim会话时,我都会感到很满足(但是我仍会继续使用vim ...我必须是受虐狂),因为当我再次打开文件时,会交换一堆-文件正在等待破坏我的工作。使用vim交换文件的最佳实践是什么?您只是选择最新的吗?如果文件按您期望的方式工作,您是否只是删除交换文件?您如何摆脱它们?
每当我因失去连接而退出vim会话时,我都会感到很满足(但是我仍会继续使用vim ...我必须是受虐狂),因为当我再次打开文件时,会交换一堆-文件正在等待破坏我的工作。使用vim交换文件的最佳实践是什么?您只是选择最新的吗?如果文件按您期望的方式工作,您是否只是删除交换文件?您如何摆脱它们?
Answers:
恢复文件始终是安全的,因为vim 除非您自己编写文件,否则从不写入任何更改。因此,从交换文件中恢复然后不保存就关闭不会改变任何内容。
获取vim,将所有交换文件放在同一位置,这样您就始终知道它们在哪里:
set directory^=$HOME/.vim/swap//
或您喜欢的任何地方。//
在文件名末尾使用,使vim为交换文件名使用绝对文件路径,因此不会出现名称冲突。确保目录存在,否则vim不会使用它(不会为您创建目录)。
注意:这仅适用于环境变量,如果您想使用vimscript变量,那么我们需要使用一些:execute
魔术:
execute "set directory^=".my_vim_home_var."/swap//"
Vim的帮助提出了一种在这种情况下可以使用的非常有用的命令::DiffOrig
。这不是默认的vim命令,因此将实现从复制:h :DiffOrig
到您的vimrc中。($VIMRUNTIME/defaults.vim
如果您有vim8,它也位于其中)。现在,您可以恢复文件,只需运行DiffOrig即可获取未修改版本的更改内容。
如果要比较多个交换文件的内容,请使用每个不同的交换文件恢复文件,然后将结果写入临时文件。现在加载文件并:diffthis
在每个文件上运行,进行所需的更改,写回原始文件,并删除临时文件和交换文件。
:swapname
:获取名称vim用于当前缓冲区的交换文件(:h :swapname
)
:recover
:恢复所选文件,与启动vim并按R(:h :recover
)时相同
Vim有完整的恢复用户手册::usr_11.txt
Vim关于交换文件的参考帮助::h swap-file
,h recovery
目录选项的帮助(用于设置交换文件的位置)::h 'directory'
编辑:设置目录的修改示例,如@B Layer的注释中所指出
exec
... set directory^=$HOME/.vim/swap//
工作正常,只要$HOME
是一个初始化的环境变量。请参阅:h expand-env
。还可以与dictionary
,undodir
和backupdir
一起使用。
就个人而言,我已关闭交换和备份文件,因为它倾向于在各处创建交换文件和备份文件,并且经常会产生冲突。Vim的持久撤消更加可靠且没有错误。
Vim当前具有持久撤消功能,这是一种更为精细的备份方法。每次按Esc,都会捕获文件的当前状态。
您可以使用:undolist
,或gundo之类的插件或undo-tree浏览撤消历史记录。
要以这种方式使用vim:
在外壳中:
mkdir ~/.vim/undodir
在Vim中
set undodir=~/.vim/undodir
set undofile
要关闭交换文件: :set noswapfile
'writebackup'
另一个问题(并解决了另一个问题)。如果您的计算机崩溃了,启用永久撤消将无济于事。您可以争辩说交换文件是出于其他原因(现代OS稳定性,UPS的存在)而不必要的,但是您在此答案中没有这样做。2.设置'undodir'
不会启用持久撤消!您需要设置'undofile'
此