#1 楼
恢复文件始终是安全的,因为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中。 (如果有vim8,也位于$VIMRUNTIME/defaults.vim
中)。现在,您可以恢复文件,只需运行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的注释所指出的那样
评论
当您收到多个交换文件时该怎么办?因为有许多断开的连接?
–leeand00
18年4月27日在11:46
我在“区分差异”的第二段中提到过。使用diff确定要保留的更改后,请删除所有临时文件和旧的交换文件(现在您知道所有交换文件在哪里)。
–flemingfleming
18年4月27日在11:54
仅供参考,只要$ HOME是初始化的环境变量,就不需要使用exec ... set directory ^ = $ HOME / .vim / swap //可以正常工作。参见:h expand-env。也可以与Dictionary,undodir和backupdir一起使用。
– B层
18年5月27日在0:38
感谢您提醒我!我在配置中使用了vimscript变量,因此执行和忘记环境变量不需要它。考虑到这一点,我可能应该只使用vim来设置环境变量。
–flemingfleming
18年6月8日在4:09
#2 楼
就个人而言,我已关闭交换和备份文件,因为它倾向于在各处创建交换文件和备份文件,并经常产生冲突。 Vim的
持久撤消功能更加可靠且没有错误。
Vim当前具有持久撤消功能,它是一种更细粒度的
备份方法。每次按Esc键,都会捕获文件的当前状态。
您可以使用
:undolist
或gundo,或undo-tree之类的插件来浏览您的撤消历史记录。
以这种方式使用vim:
创建一个目录,您将在其中编辑每个文件的历史记录
告诉vim使用该目录目录
启用持久撤消
在shell中:
mkdir ~/.vim/undodir
在Vim中
set undodir=~/.vim/undodir
set undofile
/>
要关闭交换文件:
:set noswapfile
评论
这个答案有两个相当大的问题。 1.永久撤消解决了交换文件的另一个问题(“ writebackup”解决了另一个问题)。如果您的计算机崩溃,则启用永久撤消将无济于事。您可以说交换文件是出于其他原因(现代OS稳定性,UPS的存在)而不必要的,但是您在此答案中没有这样做。 2.设置'undodir'不会启用持久撤消!您需要为此设置'undofile'
–丰富
19-10-18在11:01
评论
交换文件在那里可以保护您的工作。考虑使用gnu屏幕。我不想关闭功能;很烦人,但正如您所说的有用。
我只想知道如何正确使用它。
@DrEval我使用tmux
如果使用tmux,则不必担心失去连接:只需在重新连接时重新连接到会话即可。您可能也对mosh和@ChristianBrabandt的Recover插件感兴趣。