我有一种方法来处理交换文件。

它可以工作,但是要花一点时间。

这里是:


首先我尝试找到原始的vim会话
-跟踪PID是否仍然有效
-如果PID仍然有效,我去尝试找到该vim会话并保存文件并退出。 ..我就完成了(在这里停止)
-如果无法打开vim会话,我将杀死PID ...并必须恢复文件。

尝试查看差异


我按r键恢复文件
将恢复的文件保存到临时文件中
退出vim
在命令行之间执行vimdiff两者
手动解决任何冲突
保存文件
退出vim
删除临时文件
重新打开vim
完成



我想找到一种方法来做同样的事情,但是效率更高。该文件而不退出vim或使用插件?

评论

您可能对我的恢复插件感兴趣

#1 楼

这是您需要查看差异,解决任何差异,保存文件而不退出vim或不使用插件的vim命令:


从命令行打开文件


vim path/to/file


其余所有命令都在vim

恢复文件


r


保存恢复的文件(如果目标文件存在,则覆盖)


:sav! ~/.recovered

>
在新窗口中打开原始文件(未恢复的文件)


:vsplit

ctrl-w w


:bn
e


现在我们在左边有恢复的文件,在右边有未恢复的文件
将两个文件区别开
<现在,我们有两个文件的区别了。 (请参阅:diffthis
解决任何冲突(有关更多信息,请参阅:diffthis
保留对未解析文件的任何更改
删除交换文件
-man vimdiff

退出vim


man vimdiff



我确定有一些方法可以改善我的解决方案,如果您知道改进之处,请编辑我的解决方案!

我从http://vim.wikia.com/wiki/Swap_file_%22开始解决方案... %22already_exists!_-_ so_diff_it

我修改了链接的解决方案,因为


链接的解决方案无法处理打开目录下的文件
说明不尽如人意


评论


我不会编辑您的解决方案,因为我不知道它是否真的是一种改进,但是我个人会使用:windo diffthis而不是:diffthis :diffthis。此外,我相信答案中的应该改为 ws;这将在Windows之间切换,这似乎是目标。

–brhfl
18 Mar 15 '18:28



#2 楼

查看不带插件的交换文件的差异
不带插件,您可以使用vim备用文件。
简而言之,请尝试以下操作:
:diffthis | :vnew | r # | exe "norm! ggdd" | :diffthis
解释:
" start diff in current window with restored swap file
:diffthis 

" read origin file in new vsplit
:vnew | r # 

" Note: origin file is read to buffer,
" but first line is epmty
" It's a feature, so let's delete first empty line 
:exe "norm! ggdd" 

" start diff mode in vsplit
:diffthis

使用Recover插件查看和合并交换文件的差异
此外,还有一个插件Recover.vim。
Found a swap file by the name "test/normal/.testfile.swp"
        owned by: chrisbra   dated: Wed Nov 28 16:26:42 2012
        file name: ~chrisbra/code/git/vim/Recover/test/normal/testfile
        modified: YES
        user name: chrisbra   host name: R500
        process ID: 4878 [not existing]
While opening file "test/normal/testfile"
            dated: Tue Nov  6 20:11:55 2012
Please choose:
[C]ompare, (O)pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete:

合并后,您可以使用命令:FinishRecovery删除交换文件

评论


嗨,@ BLayer,谢谢。更新的答案-使用备用文件添加了解决方案

–亚森
19年7月2日在9:40

#3 楼

根据Trevor的回答,我做了以下命令来处理交换文件:

noremap <LEADER>s <C-w>o:sav! ~/.vim/.recovered<CR>:vs<CR><C-w>w:bn<CR>
noremap <LEADER>t  :wa<CR>:bp\|bd #<CR><C-o>


到达ATTENTION: Found a swap file...提示符后,我


键入r以恢复交换
键入<LEADER>s以将交换的版本另存为.recovered并在新的拆分中打开原始文件
在交换提示处键入e以编辑原始文件
键入:windo diffthis区分两个文件
对原始文件进行必要的更改
键入<LEADER>t以写入原始文件,将其关闭,然后重新打开
在交换提示符处键入d删除交换文件
关闭.recovered文件(键入类似:bp<CR>:bp\|bd #<CR>的内容)。