`

Vim_vimdiff howto

    博客分类:
  • Vim
 
阅读更多

 

启动方法

首先保证系统中的diff命令是可用的。Vim的diff模式是依赖于diff命令的。Vimdiff的基本用法就是:

vimdiff [options] file1 file2 [file3]

# vimdiff  FILE_LEFT  FILE_RIGHT  或者  # vim -d  FILE_LEFT  FILE_RIGHT

除了用这种方法启动vim的diff模式之外,我们还可以用分割窗口命令来启动diff模式:

 

同时打开main.cpp和main2.cpp,水平方向分屏: 

$vimdiff -o main.cpp main2.cpp 

 

这样会同时打开两个文件在上下两栏显示

# vim FILE_LEFT 然后在vim的ex模式(也就是"冒号"模式)下输入: :vertical diffsplit FILE_RIGHT

也可以达到同样的效果。如果希望交换两个窗口的位置,或者希望改变窗口的分割方式,可以使用下列命令:

1. Ctrl-w K(把当前窗口移到最上边)

2. Ctrl-w H(把当前窗口移到最左边)

3. Ctrl-w J(把当前窗口移到最下边)

4. Ctrl-w L(把当前窗口移到最右边)

其中1和3两个操作会把窗口改成水平分割方式。

 

光标移动

接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置:

:set noscrollbind

可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:

]c

反向跳转是:

[c

如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。

 

文件合并

文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令

dp (diff "put")

如果希望把另一个文件的内容复制到当前行中,可以使用命令

do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了)

如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:

Ctrl-w, w

补充一条: 如果想交换上/下、左/右两个分隔窗口的位置,可以使用 ctrl-w,r 命令

 

在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:

:diffupdate

如果希望撤销修改,可以和平常用vim编辑一样,直接

<ESC>, u

但是要注意一定要将光标移动到需要撤销修改的文件窗口中。

 

同时操作两个文件

在比较和合并告一段落之后,可以用下列命令对两个文件同时进行操作。比如同时退出:

:qa (quit all)

如果希望保存全部文件:

:wa (write all)

或者是两者的合并命令,保存全部文件,然后退出:

:wqa (write, then quit all)

如果在退出的时候不希望保存任何操作的结果:

:qa! (force to quit all)

 

上下文的展开和查看

比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数,可以这样设置:

:set diffopt=context:3

可以用简单的折叠命令来临时展开被折叠的相同的文本行:

zo (folding open,之所以用z这个字母,是因为它看上去比较像折叠着的纸)

然后可以用下列命令来重新折叠:

zc (folding close)

 

 

*用另外一个窗口的不同处替换当前:

输入"do".

这里,前提是用']c'或者'[c'跳到相应的不同处,执行完毕之后,当前窗口当前位置内容被替换为另外一个窗口的当前位置内容。注意这里是两个文件的情况,当前窗口有多于两个文件时无法进行。

 

*先指定范围1-100行,再用另外一个窗口的不同处替换当前: 

输入"1,100 diffg".

或输入"1,100 diffget".

这里,等同于do不过指定了范围,如果有缓冲还可在diffg后面指定缓冲名字。

 

*先指定范围1-100行,再用指定3号缓冲(假设是文件file3)的不同处替换当前:

输入"1,100 diffg 3".

或输入"1,100 diffget 3".

这里,在diffg后面指定缓冲名字。

 

*用当前替换另外一个窗口的不同处:

输入"dp".

这里,前提是用']c'或者'[c'跳到相应的不同处,执行完毕之后,另外一个窗口的当前位置内容被替换成当前窗口当前的位置内容。注意这里是两个文件的情况,当前窗口有多于两个文件时无法进行。

 

*先指定范围1-100行,再用另外一个窗口的不同处替换当前:

输入"1,100 diffpu".

或输入"1,100 diffput".

这里,等同于dp不过指定了范围,如果有缓冲还可在diffpu后面指定缓冲名字。

 

*先指定范围1-100行,再用指定3号缓冲(假设是文件file3)的不同处替换当前:

输入"1,100 diffpu 3".

或输入"1,100 diffput 3".

这里,在diffpu后面指定缓冲名字。

 

*新开一个水平窗口载入file文件进行对比:

输入":diffsplit file".

这里新开的窗口是水平排列的,在不同窗口间移动的命令同vim。

 

*新开一个垂直窗口载入file文件进行对比:

输入"vert diffsplit file".

这里,vert实际是vertical前缀的简写。新开的窗口是垂直排列的,在不同窗口间移动的命令同vim。

分享到:
评论

相关推荐

    vim-configure.tar.gz_vim_vim_configure

    "vim-configure.tar.gz_vim_vim_configure" 是一个包含了 Vim 配置文件的压缩包,旨在帮助用户优化 Vim 的使用体验,提供自动提示、补全功能以及代码高亮等特性。 在 Vim 中配置这些功能,可以使编辑效率大幅提升。...

    vim_configure

    在本主题中,我们将聚焦于“vim_configure”,这涉及到安装vim插件以及在Vi编辑器中启用鼠标支持。 1. **vim插件安装** - Vim拥有众多优秀的插件,如NERDTree(文件树视图)、FZF(模糊查找)、ALE(自动代码检查...

    vimconfig_tags_vim_

    vimconfig_tags_vim_ 是一个关于Vim编辑器配置和ctags工具使用的主题。Vim是一款功能强大的文本编辑器,深受程序员和高级用户喜爱,它的高度可定制性和高效操作方式使得它在编程环境中非常受欢迎。在这个主题中,...

    vim_config 超级实用

    `vim_config` 恰好是针对 `vim` 的个性化配置,旨在提升你的 `vim` 使用体验,使界面更加舒适,工具使用更加便捷。下面,我们将深入探讨如何通过 `vim_config` 来优化你的 `vim` 配置,以提高编程效率。 1. **安装...

    vim_user_manual 702&603

    《vim_user_manual 702&603》是针对vim编辑器的中文用户手册,分别涵盖了7.2和6.3两个版本的详细信息。vim(Vi Improved)是一款强大的文本编辑器,广泛应用于Linux、Unix和macOS等操作系统中。它的功能丰富,灵活性...

    vim_plugin.zip

    vim_plugin: neocomplcache-7.0.zip nerdtree.zip php-doc.vim vim.png Vim基础命令表.doc ZenCodingCheatSheet.pdf zencoding-vim.zip

    vim_for_linux.zip

    "vim_for_linux.zip" 是一个专为Linux用户设计的压缩包,旨在通过自动化脚本帮助用户轻松地安装Vim及其相关插件,避免手动配置的繁琐过程。这个压缩包文件包含了一整套安装流程,使得初学者和经验丰富的开发者都能...

    fe-vim_FrontEnd_vim_bread4fy_

    【fe-vim_FrontEnd_vim_bread4fy_】是一个专门为前端工程师设计的Vim配置集合,旨在提升开发效率并提供丰富的代码辅助功能。Vim是一款强大的文本编辑器,因其高度可定制性和高效操作性而深受程序员喜爱,尤其是前端...

    Modern_Vim_Craft_Your_Development_Environment_with_Vim_8_and_Neovim

    《Modern Vim》是一本专注于Vim 8和Neovim编辑器进阶使用的经典书籍,由Drew Neil撰写。这本书旨在帮助用户提升在Vim开发环境中的效率和体验,通过深入学习和实践,将Vim从一个普通的文本编辑器转变为强大的开发工具...

    vim_plug_3.0

    vim82, plug, taglist, nerdcommente, airliner,gutentags, LeaderF, gtags, AutoComplPop,omnicppcomplete,ripgrep,fzf,auto-save,auto-pairs插件安装包,安装步骤链接:...

    vim_cheat_sheet_for_programmers_bnw.xlsx

    vim cheat sheet for programmers

    Learn-Vim_zh_cn-快乐快速学习Vimr

    Vim 难学难用?但事实是,它依旧受许多程序员的欢迎。 或许,只是你的「打开方式」不对。 那么,如此学习Vim的方式,到底有多「聪明」? 下面文件描述讲解VIm的简单语法规则,将 Vim 命令的一般结构,分解成了一个...

    vim_101_hacks

    ### Vim_101_Hacks:精通Vim编辑器的全面指南 #### 引言 在文本编辑领域,Vim(Vi Improved)以其强大的功能、灵活性以及效率而著称,深受程序员和技术人员的喜爱。《Vim_101_Hacks》这本书深入浅出地介绍了如何...

    vim_rpm.zip

    【标题】"vim_rpm.zip" 提供的是一个包含了 Vim 编辑器的 RPM 包,主要用于在 CentOS 7 的环境中进行离线安装。RPM(Red Hat Package Manager)是基于Linux系统的软件包管理器,它能够方便地安装、升级、查询和删除...

    vim_runtime包

    Linux下vim集成环境,集成了常用插件.直接解压到宿主目录即可用. 以下是插件列表 acp a bufexplorer command-t c DoxygenToolkit fuf JavascriptLint jsbeautify minibufexpl mru NERD_commenter NERD_tree peepopen ...

    vim_plugin.tar.gz

    自己用的vim plugin: bufexplorer.vim genutils.vim grep.vim lookupfile.vim minibufexpl.vim SuperTab.vim taglist.vim visualmark.vim winfileexplorer.vim winmanager.vim wintagexplorer.vim

    linux_vim插件_最新

    linux_vim linux_vim linux_vimlinux_vim linux_vim linux_vimlinux_vim linux_vim linux_vimlinux_vim linux_vim linux_vimlinux_vim linux_vim linux_vimlinux_vim linux_vim linux_vimlinux_vim linux_vim linux_...

    vim_ide_for_cpp

    **vim_ide_for_cpp** 在Linux环境中,Vim是一个强大的文本编辑器,它以其高度可定制性和高效编辑功能深受程序员喜爱。"vim_ide_for_cpp"是一个专为C++开发者优化的Vim配置,旨在将其转化为一个功能完备的集成开发...

Global site tag (gtag.js) - Google Analytics