为什么在Vim中的DiffOrig中使用0d_?

lon*_*owk 5 vim

在Vim的在线手册中,:help DiffOrig 将显示推荐的命令序列以获取当前编辑文件的更改.

这里是:

command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
                   \ | wincmd p | diffthis
Run Code Online (Sandbox Code Playgroud)

我想知道是什么效果0d_.我试过0d_正常模式,它的工作原理dd,但我无法理解为什么它在这里使用.

Ben*_*oit 8

让我们解释一下:假设你有原始的foo.txt包含(带行号):

1 a
2 c
3 d
~
Run Code Online (Sandbox Code Playgroud)

您在第1行和第2行之间添加了一行"b":

  • :vert new在垂直split(:help :new)中创建一个新的空缓冲区
  • :set bt=nofile使它成为临时缓冲区(:help 'bt').注意:

    1 a  | 1 ·<cursor here
    2 b  | ~
    3 c  | ~
    4 d  | ~
    ~    | ~
    
    Run Code Online (Sandbox Code Playgroud)
  • :r #当前行之后插入备用文件(#)的内容,存储在文件系统中.您尚未保存其他缓冲区,因此您可以获得原始内容.(:help alternate-file).
    :help :r告诉你它总是插入后.因此:

    1 a  | 1
    2 b  | 2 a
    3 c  | 3 c
    4 d  | 4 d
    ~    | ~
    
    Run Code Online (Sandbox Code Playgroud)
  • :0d_删除第一行.为什么0,我真的不知道,我宁愿写它:1d_.:help range讲述:

    当使用0(零)时,大多数命令将其解释为1

    _指定它进入到黑洞寄存器.请参阅 :help :d有关:dex命令,它的工作原理行动作.

其余的很明显.