欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

如果处理vim产生的swp文件 以及diff功能的使用

 

使用vi编辑器编辑文件时,经常会由于非正常退出而产生一个swp文件,以后每次进入时都会提示,非常麻烦。现将网上搜集的解决方法陈列于此:

swp文件产生原因分为:1.当你用多个程序编辑同一个文件时。
                 2.非常规退出时。
通常最后的少量改动无法恢复. Vim会在你连续4秒不键入内容时跟磁盘同步一次, 或者是连续键入了200个字符之后. 这可以通过´updatetime´和´updatecount´两个选项来控制. 所以系统如果在有所改动之后但Vim还没有同步时发生了宕机, 那这一部分内容就无法恢复了。
第一种情况的话,为了避免同一个文件产生两个不同的版本 (vim中的原话),还是建议选择readonly为好
第二种情况的话,你可以 用vim -r filename恢复,然后再把swp文件删除(rm .filename.swp)。
 
进一步学习: swap-filej 关于交换文件的位置和命名 
       :preservej 手工刷新交换文件 
       :swapnamej 查看原文件及其交换文件的名字 
      ´updatecount´ 连续击键多少次后做一次同步 
      ´updatetime´ 多长时间之后做一次同步 
      ´swapsync´ 同步交换文件时是否同时做一次磁盘同步 
      ´directory´ 列出存放交换文件的目录 
      ´maxmem´ 尚未写入交换文件的内容所受的内存限制 
      ´maxmemtot´ 同上, 但是针对所有文件

 

 

 

* 11.1 *  基本恢复 

在大多数情况下,恢复一个文件相当简单。假设你知道正在编辑的是哪个文件(并且硬盘 
还能用)。可以用 "-r" 选项启动 Vim: 

        vim -r help.txt 

Vim 会读取交换文件(用于保存你的编辑数据的文件)并且提取原文的编辑碎片。如果一 
切顺利,你会看到如下文字 (当然了,文件名会不一样): 

        Using swap file ".help.txt.swp" 
        Original file "~/vim/runtime/doc/help.txt" 
        Recovery completed. You should check if everything is OK. 
        (You might want to write out this file under another name 
        and run diff with the original file to check for changes) 
        Delete the .swp file afterwards. 

        (译者注:中文情况下是: 
        使用交换文件 ".help.txt.swp" 
        原文件 "~/vim/runtime/doc/help.txt" 
        恢复完成. 请确定一切正常. 
        (你可能想要把这个文件另存为别的文件名,
        再执行 diff 与原文件比较以检查是否有改变)
        之后可以删除交换文件。
        ) 

为了安全起见,可以用另一个文件名保存这个文件: 

        :write help.txt.recovered 

可以把这个文件与原文件作一下比较,看看恢复的效果如何。这方面 Vimdiff 可以帮很大 
的忙
  
如何使用vim的 diff
用 vimdiff 显示区别

有一种特殊的启动 Vim 的方法可以用来显示两个文件的区别。让我们打开一个 "main.c"
并插入一些字符。在设置了 'backup' 选项的情况下保存这个文件,以便产生 "main.c~"
备份文件。
    在命令行中输入如下命令:(不是在Vim中)

        vimdiff main.c~ main.c

Vim 会用垂直分割的方式打开两个文件。你只能看到你修改过的地方和上下几行的地方。

         VV                   VV
        +-----------------------------------------+
        |+ +--123 lines: /* a|+ +--123 lines: /* a|  <- 折叠
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  changed text      |  <- 修改过的行
        |  text              |  text              |
        |  text              |  ------------------|  <- 删除的行
        |  text              |  text              |
        |  text              |  text              |
        |  text              |  text              |
        |+ +--432 lines: text|+ +--432 lines: text|  <- 折叠
        |  ~                 |  ~                 |
        |  ~                 |  ~                 |
        |main.c~==============main.c==============|
        |                                         |
        +-----------------------------------------+

(这幅图没有显示出加亮效果,可以使用 vimdiff 命令看到更好的效果)

    那些没有修改的行会被折叠成一行,这称为 "关闭的折叠"(closed fold)。上图
中由 "<- 折起" 标记的行就是一个用一行表示123行的折叠。这些行在两个文件中完全
相同。
    标记为 "<- 修改过的行" 被高亮显示,而增加的行被用另一种颜色表示。这可以
很清楚地表示出两个文件间的不同。
    被删除的行在 main.c 窗口中用 "---" 显示,如图中用 "<- 删除的行" 标记的行。
这些字符并不是真的存在。它们只是用于填充 main.c,以便与另一个窗口对齐。


折 叠 栏

每个窗口在左边都有一个颜色略有不同的显示栏,图中标识为 "VV"。你会发现每个折叠
在那个位置都有一个加号。把鼠标移到那里并按左键可以打开那个折起,从而让你看到
里面的内容。
    对于打开的折叠,折叠栏上会出现一个减号。如果你单击那个减号,折叠会被重新关
闭。
    当然,这只能在你有鼠标的情况下使用。如果你没有,可以用 "zo" 打开一个折叠
关闭使用 "zc"。


用 Vim 做 比 较

启动比较模式的另一种方法是从 Vim 内部开始:编辑 "main.c" 文件,然后分割窗口
显示区别:

        :edit main.c
        :vertical diffsplit main.c

":vertical" 命令使窗口用垂直的方式分割。如果你不写这个命令,结果会变成水平分
割。

如果你有一个当前文件的补丁或者 diff 文件,你可以有第三种方法启动比较模式:
先编辑这个文件,然后告诉 Vim 补丁文件的名称:

        :edit main.c
        :vertical diffpatch main.c diff

警告:补丁文件中必须仅包括为一个目标文件所做的补丁,否则你可能会得到一大堆错
误信息。还可能有些你没打算打补丁的文件被打了补丁。
    补丁功能只改变你内存中的文件,不会修改你硬盘上的文件(除非你决定写入改动)。


滚 屏 绑 定

当文件中有很多改动时,你可以用通常的方式滚动屏幕。Vim 会尽可能保持两个文件对
齐,以便你可以并排看到文件的区别

    如果暂时想关闭这个特性,使用如下命令:

        :set noscrollbind


跳 转 到 修 改 的 地 方

如果你通过某种方法取消了折叠功能,可能很难找到有改动的地方。使用如下命令可以跳
转到下一个修改点:

       ]c

反向跳转为:

        [c

加上一个个数前缀可以跳得更远


消 除 差 异

你可以把文本从一个窗口移到另一个,并以此来消除差异,或者为其中一个文件中增加
几行。Vim 有时可能无法及时更新高亮显示。要修正这种问题,使用如下命令:

        :diffupdate

要消除差异,你可以把一个高亮显示的块从一个窗口移动到另一个窗口。以上面的
"main.c" 和 "main.c~" 为例,把光标移到左边的窗口,在另一个窗口中被删除的行
的位置,执行如下命令:

        :dp

这将把文字从左边拷到右边,从而消除两边的差异。"dp" 代表 "diff put"。
    你也可以反过来做:把光标移到右边的窗口,移到被 "改动" 了的行上,然后执行
如下命令:

        :do

把文本从左边拷到右边,从而消除差异。由于两个文件已经没有区别了,Vim 会把所有
文字全部折叠起来。"do" 代表 "diff obtain"。本来用 "dg" (diff get) 会更好。可是
它已经有另外的意思了 ("dgg" 删除从光标为止到首行的所有文本 )。

来自 https://blog.csdn.net/u012349696/article/details/50000429

普通分类: