vimdiff的常用命令

转自:http://www.cnblogs.com/xuxm2007/archive/2010/10/22/1858139.html

http://www.ibm.com/developerworks/cn/linux/l-vimdiff/

jg/blog/item/ff62e6d5d9ecf315a08bb77c.html”>http://hi.baidu.com/jg/blog/item/ff62e6d5d9ecf315a08bb77c.html

http://hi.baidu.com/nkhzj/blog/item/e6b5a7017222100a1d958307.html

★ 跳转到下一个diff点:

请使用 ]c 命令

★ 跳转到前一个diff点:
请使用 [c 命令

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

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

★ 如果希望把另一个文件的内容复制到当前行中,可以使用命令:
do (diff “get”,之所以不用dg,是因为dg已经被另一个命令占用了,所以用了diff “obtain”)

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

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

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

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

★ zc (folding close)重新折叠起来。

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

更详细的介绍如下

http://blog.chinaunix.net/u1/34500/article_129477.html

vimdiff [options] file1 file2 [file3]

[功能]

同时打开两个或者多个文件,进行比较。

[描述]

vimdiff会将两个文件的相同指出尽量列在同一位置上面,便于查对比较。其命令基本和vim是一致的。

vimdiff使用vim启动两个或者多个文件,每个文件有其自己的窗口。每个文件中不同的地方会用高亮显示出来。它在进行改变的检查以及将改动从一个版本的文件移动到另一个版本的情况下非常方便。首先你得保证安装了vim才能是用vimdiff.用这个命令安装:

apt-get install vim-full

其他类似的工具还tkdiff,meld 和 xfdiff4等。

[举例]

*同时打开main.cpp和main2.cpp,垂直方向分屏:

$vimdiff main.cpp main2.cpp

或$vim -d main.cpp main2.cpp

这样会同时打开两个文件垂直在两栏显示,可以打开不止两个文件。

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

$vimdiff -o main.cpp main2.cpp

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

**打开文件之后

可以看见不同的地方会高亮显示,相同的地方默认会被折叠起来。如下常用操作:

*跳到下一个不同的地方:

输入”]c”.

*跳到上一个不同的地方:

输入”[c”.

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

输入”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。

*强制更新文件的不同状态:

输入”:diffupdate”.

这里,当我们修改某一个文件的时候,vim会试图使它和另外一个文件的不同之处保持更新,例如插入和删除行。但是,更复杂的修改或者在一个行内的修改可能会导致不同处(vimdiff)没有及时更新,这时候可以运行这个命令(diffupdate)进行强制更新。

*修改缺省的上下文行为3行:

输入”:set diffopt=context:3”.

这里vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数,可以这样设置.

*打开折叠的文本:

输入”zo”.

*折叠折叠的文本:

输入”zc”.

*修改完毕之后保存所有文件:

输入”wqa”.

**

[其他]

其实vimdiff就是vim,只是一个符号链接而已,你可以file /etc/alternatives/*|grep bin/vim看看。

How to configure vimrc

“是否兼容VI,compatible为兼容,nocompatible为不完全兼容
“如果设置为compatible,则tab将不会变成空格
set nocompatible

source VIMRUNTIME/vimrcexample.vimsource VIMRUNTIME/mswin.vim
“设置鼠标运行模式为WINDOWS模式
behave mswin

” Multi-encoding setting, MUST BE IN THE BEGINNING OF .vimrc!

if has(“multi_byte”)
” When ‘fileencodings’ starts with ‘ucs-bom’, don’t do this manually
“set bomb
set fileencodings=ucs-bom,utf-8,chinese,taiwan,japan,korea,latin1
” CJK environment detection and corresponding setting
if v:lang =~ “^zh_CN”
” Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
set encoding=chinese
set termencoding=chinese
if &fileencoding == ”
set fileencoding=chinese
endif
elseif v:lang =~ “^zh_TW”
” Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
set encoding=taiwan
set termencoding=taiwan
if &fileencoding == ”
set fileencoding=taiwan
endif
elseif v:lang =~ “^ja_JP”
” Japanese, on Unix euc-jp, on MS-Windows cp932
set encoding=japan
set termencoding=japan
if &fileencoding == ”
set fileencoding=japan
endif
elseif v:lang =~ “^ko”
” Korean on Unix euc-kr, on MS-Windows cp949
set encoding=korea
set termencoding=korea
if &fileencoding == ”
set fileencoding=korea
endif
endif
” Detect UTF-8 locale, and override CJK setting if needed
if v:lang =~ “utf8 "||v:lang= "UTF8
set encoding=utf-8
endif
else
echoerr ‘Sorry, this version of (g)Vim was not compiled with “multi_byte”’
endif

“解决菜单乱码
set encoding=utf-8
“fileencodings需要注意顺序,前面的字符集应该比后面的字符集大
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set langmenu=zh_CN.utf-8
set imcmdline
source VIMRUNTIME/delmenu.vimsource VIMRUNTIME/menu.vim

“解决consle输出乱码
language messages zh_CN.utf-8

“自动检测文件类型并加载相应的设置,snipMate插件需要打开这个配置选项
filetype plugin indent on

“语法高亮
syntax on

“自动缩进
set autoindent
“设置 Backspace 和 Delete 的灵活程度,backspace=2 则没有任何限制
“设置在哪些模式下使用鼠标功能,mouse=a 表示所有模式
set mouse=a
set backspace=2
“不自动换行
set nowrap
“设置超过100字符自动换行
“set textwidth=100
“设置超过100列的字符带下划线
“au BufWinEnter * let w:m2=matchadd(‘Underlined’, ‘\%>100v.+’, -1)
“syn match out80 /\%80v./ containedin=ALL
“hi out80 guifg=white guibg=red
“智能对齐方式
set smartindent
“一个tab是4个字符
set tabstop=4
“按一次tab前进4个字符
set softtabstop=4
“用空格代替tab
set expandtab
“设置自动缩进
set ai!
“缩进的字符个数
set cindent shiftwidth=4
“set autoindent shiftwidth=2

“设置折叠模式
set foldcolumn=4
“光标遇到折叠,折叠就打开
“set foldopen=all
“移开折叠时自动关闭折叠
“set foldclose=all
“zf zo zc zd zr zm zR zM zn zi zN
“依缩进折叠
” manual 手工定义折叠
” indent 更多的缩进表示更高级别的折叠
” expr 用表达式来定义折叠
” syntax 用语法高亮来定义折叠
” diff 对没有更改的文本进行折叠
” marker 对文中的标志折叠
set foldmethod=syntax
“启动时不要自动折叠代码
set foldlevel=100
“依标记折叠
set foldmethod=marker

“显示行号
set number

“打开光标的行列位置显示功能
set ruler

“显示中文引号
set ambiwidth=double

“行高亮
set cursorline
“列高亮,与函数列表有冲突
set cursorcolumn

“设置命令行的高度
set cmdheight=2

“高亮搜索的关键字
set hlsearch

“搜索忽略大小写
set ignorecase

“设置命令历史行数
set history=100

“启动的时候不显示那个援助索马里儿童的提示
“set shortmess=atI

“不要闪烁
“set novisualbell

“显示TAB健
set list
set listchars=tab:>-,trail:-

“高亮字符,让其不受100列限制
“:highlight OverLength ctermbg=red ctermfg=white guibg=grey guifg=white
“:match OverLength ‘\%101v.*’

“设置VIM状态栏
set laststatus=2 “显示状态栏(默认值为1, 无法显示状态栏)
set statusline=
set statusline+=%2*%-3.3n%0*\ ” buffer number
set statusline+=%f\ ” file name
set statusline+=%h%1*%m%r%w%0* ” flag
set statusline+=[
if v:version >= 600
set statusline+=%{strlen(&ft)?&ft:’none’}, ” filetype
set statusline+=%{&fileencoding}, ” encoding
endif
set statusline+=%{&fileformat}] ” file format
set statusline+=%= ” right align
“set statusline+=%2*0x%-8B\ ” current char
set statusline+=0x%-8B\ ” current char
set statusline+=%-14.(%l,%c%V%)\ %<%P ” offset
if filereadable(expand(“$VIM/vimfiles/plugin/vimbuddy.vim”))
set statusline+=\ %{VimBuddy()} ” vim buddy
endif
“状态行颜色
“highlight StatusLine guifg=SlateBlue guibg=Yellow
“highlight StatusLineNC guifg=Gray guibg=White

“设置路径,多个路径用逗号分隔
set path=.,”E:/Web/htdocs”,,

“去掉有关vi一致性模式,避免以前版本的一些bug和局限
set nocp

“增强模式中的命令行自动完成操作
set wildmenu

“执行 Vim 缺省提供的 .vimrc 文件的示例,包含了打开语法加亮显示等最常用的功能
source $VIMRUNTIME/vimrc_example.vim

“缺省不产生备份文件
set nobackup
“在输入括号时光标会短暂地跳到与之相匹配的括号处,不影响输入
set showmatch
“正确地处理中文字符的折行和拼接
set formatoptions+=mM

“设定文件浏览器目录为当前目录
set bsdir=buffer
“自动切换当前目录为当前文件所在的目录
set autochdir
“自动重新加载外部修改内容
“set autoread

“使PHP识别EOT字符串
hi link phpheredoc string

“允许在有未保存的修改时切换缓冲区
set hidden

“选中一段文字并全文搜索这段文字
vmap ,/ y/=escape(@”, ‘\/.*  [])vmap,?y?=escape(@,\/. ^~[]’)

“进入当前编辑的文件的目录
autocmd BufEnter * exec “cd %:p:h”

“保存文件的格式顺序
set fileformats=dos,unix

“配色(更多的配色见colors目录和http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html
“colorscheme peacock_light
colorscheme peacock_desert

“设置字体
if has(“gui”)
if has(“win32”)
“启动时会弹出字体选择框,如果取消,则采用系统默认字体
“set guifont=*
“Windows默认使用的字体,字体较粗
“set guifont=Fixedsys
“中文显示变形,字体较粗
“set guifont=Monospace:h9
“中文显示变形,字体较细
“set guifont=Consolas:h9
“中文显示变形,字体较细
“set guifont=Lucida\ Console:h9
“中文显示变形,字体较细
set guifont=Monaco:h9
“中文显示变形,字体较细
“set guifont=Andale\ Mono:h10
“中文显示变形,字体较细
“set guifont=Bitstream\ Vera\ Sans\ Mono:h9
“需要运行修改版的gvim才能识别
“set guifont=YaHei\ Consolas\ Hybrid:h9
“如果guifontwide采用中文字体,汉字将自动使用guifontwide,英文自动使用guifont
set guifontwide=YaHei\ Consolas\ Hybrid:h9
else
set guifont=SimSun:h10
endif
“set columns=128 lines=36
endif

“启动后最大化
au GUIEnter * simalt ~x

“置粘贴模式,这样粘贴过来的程序代码就不会错位了。
“set paste

“设置帮助信息
set helplang=cn

“自动保存session和viminfo
“缺省的sessionoptions选项包括:blank,buffers,curdir,folds,help,options,tabpages,winsize
“也就是会话文件会恢复当前编辑环境的空窗口、所有的缓冲区、当前目录、折叠(fold)相关的信息、帮助窗口、所有的选项和映射、所有的标签页(tab)、窗口大小
“set sessionoptions-=curdir
“au VimLeave * mksession! VIMRUNTIME/Session.vimauVimLeavewviminfo! VIMRUNTIME/_viminfo
“source VIMRUNTIME/Session.vimrviminfo VIMRUNTIME/_viminfo

“记录上次关闭的文件及状态
set viminfo=’10,\”100,:20,%,n VIMRUNTIME/viminfoauBufReadPostifline(\”)>0|ifline(\”)<=line( ")|exe("norm '\"")|else|exe "norm $”|endif|endif

“设置插件SuperTab
“设置按下后默认的补全方式, 默认是,
“现在改为. 关于的补全方式,
“还有其他的补全方式, 可以看看下面的一些帮助:
“:help ins-completion
“:help compl-omni
let g:SuperTabRetainCompletionType=2
“0 - 不记录上次的补全方式
“1 - 记住上次的补全方式,直到用其他的补全命令改变它
“2 - 记住上次的补全方式,直到按ESC退出插入模式为止
let g:SuperTabDefaultCompletionType=””

set diffexpr=MyDiff()
function! MyDiff()
let opt = ‘-a –binary ’
if &diffopt =~ ‘icase’ | let opt = opt . ‘-i ’ | endif
if &diffopt =~ ‘iwhite’ | let opt = opt . ‘-b ’ | endif
let arg1 = v:fname_in
if arg1 =~ ’ ’ | let arg1 = ‘”’ . arg1 . ‘”’ | endif
let arg2 = v:fname_new
if arg2 =~ ’ ’ | let arg2 = ‘”’ . arg2 . ‘”’ | endif
let arg3 = v:fname_out
if arg3 =~ ’ ’ | let arg3 = ‘”’ . arg3 . ‘”’ | endif
let eq = ”
if $VIMRUNTIME =~ ’ ’
if &sh =~ ‘\

vim——打开多个文件、同时显示多个文件、在文件之间切换

打开多个文件:
1.vim还没有启动的时候:
在终端里输入
vim file1 file2 … filen便可以打开所有想要打开的文件
2.vim已经启动
输入

:open file

可以再打开一个文件,并且此时vim里会显示出file文件的内容。

同时显示多个文件:
:split

:vsplit

在文件之间切换:
1.文件间切换
Ctrl+6—下一个文件

:bn  —  下一个文件
:bp  —  上一个文件

对于用(v)split在多个窗格中打开的文件,这种方法只会在当前窗格中切换不同的文件。
2.在窗格间切换的方法

Ctrl+w+方向键 —— 切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l —— 同上
Ctrl+ww —— 依次向后切换到下一个窗格中

VIM底部显示当前编辑文件绝对路径

" 状态栏  
set laststatus=2      " 总是显示状态栏  
highlight StatusLine cterm=bold ctermfg=yellow ctermbg=blue  
" 获取当前路径,将$HOME转化为~  
function! CurDir()  
        let curdir = substitute(getcwd(), $HOME, "~", "g")  
        return curdir  
endfunction  
set statusline=[%n]\ %f%m%r%h\ \|\ \ pwd:\ %{CurDir()}\ \ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%b%{((&fenc==\"\")?\"\":\"\ \|\ \".&fenc)}\ \|\ %{$USER}\ @\ %{hostname()}\  

// 或以下两句  
set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] "显示文件名:总行数,总的字符数  
set ruler "在编辑过程中,在右下角显示光标位置的状态行  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值