每次我通过断开连接而退出vim会话时,我都会感到很满足(但我仍会继续使用vim ...我必须是受虐狂),因为当我再次打开文件时,会交换一堆-文件正在等待破坏我的工作。使用vim交换文件的最佳实践是什么?您只是选择最新的吗?如果文件按您期望的方式工作,您是否只是删除交换文件?您如何摆脱它们?

评论

交换文件在那里可以保护您的工作。考虑使用gnu屏幕。

我不想关闭功能;很烦人,但正如您所说的有用。

我只想知道如何正确使用它。

@DrEval我使用tmux

如果使用tmux,则不必担心失去连接:只需在重新连接时重新连接到会话即可。您可能也对mosh和@ChristianBrabandt的Recover插件感兴趣。

#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-fileh 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