//转自http://www.luochunhui.com大罗(Giko)技术空间
文件打开
命令行打开文件:
luochunhui.com$ vim file
在vim中打开另一个文件:
:e foo.c
然后回到打开的上一个文件:
:e #
打开下一个文件使用n.n的用法和q相似。n是关闭当前并打开下一个,q是退出vim。他们也都可以加q或!修饰。:
:n :wn :n!
查看在这本次vim中,已经打开了哪些文件了。
:ls 1 %a "test.c" line 1 2 "array.c" line 0
根据这个结果,可以回到任何一个文件
:e #2
彻底的关闭文件,参数可以是ls看到的ID,或者是文件名:
:bd 2 :bd array.c
光标移动
移到文件尾部,使用两个”[",
]]
移到文件头部,使用两个"]",
[[
移到某一行:
:28
从某一行往下移N行
:28 3 #将定位到31行
移到{,[,(, #ifdef等配对符号的的另一端
%
显示控制
显示换行,tab等不可见字符。 VIM将会把换行显示为$, tag显示为^I.
:se list
显示行号
:se nu
隐藏行号:
:se nonu
输入控制
将tab设置为4个空格的宽度(默认为8)。
:se ts=4
在输入时将tab自动替换为N个空格
:se expandtab
将文件中原有的tab也替换为空格。
:retab
让vim帮你自动格式化缩进,在命令模式下输入(不输入":")
gg=G
查找及替换
查找所有的tab。
/\t
将\t替换为四个空格
:%s/\t/ /g
再狠一点,在全部打开的文件中继续替换:
:bufdo %s/\t/ /g
找单词, 这个语句将会找到int word, 但不会找alongword
/\
再方便一点,定位到下一个单词,他和当前光标所在处的单词相同:
*
变为反向找:
? n
变为正向找:
/ n
make
调用make:
:make
默认调用的:make操作是make,不带任何参数
修改make, 空格需要使用\ \进行转义。
:set makeprg=make\ \-b
在make失败后,敲任意键后将自动定位到出错的行。
查看make错误,不加参数将显示出错的后5行。 可加上!输出所有错误行:
:clist :clist!
另外两个, 显示第一行,或最后一行错误。如果加参数,则显示第N行
:cfirst [N] :clast [N]
定位到下一个编译错误行:
:cn
ctags
生成ctags文件,在命令行执行命令后,将在当前目录生成一个tags文件
luochunhui.com$ ctags -l -i -s -t -v -d -p .
vi中使用本tags文件
:tag ./tags
定位到指定函数,再tn定位到下一个:
:ta /myfunc :tn
跟踪到光标所在处的函数,类似eclipse中的F3功能
按键: ctrl + ]
返回刚才:
按键: ctrl + t
],t两个操作为堆栈式,不管你进入了多少ctrl+],你都可以通过ctrl+t原路返回。
csope
cscope是比ctags更为强大的源码导航工具,比如,他可以导向到库代码文件
luochunhui.com$ cscope -Rbq
将生成: cscope.out 及几个不用理会的中将文件
在vi中加载:
:cs add ./cscope.out
查找函数定义
:cs f g myfunc
查找函数在何处被调用。找下一条匹配规则与ctags相同:
:cs f c myfunc :nt
查找函数也可以使用tag语法:
:cstag /myfunc
跟踪头文件:
:cs f f stdio.h
你可以简单的输入:cs查看其所有支持的规则
:cs
貌似cs没有ctrl+]这样的快捷键,是个遗憾。不过可完全可以同时加载ctags和cscope两种导航工具。达到这个需求。
自动完成
在vim的输入状态下,输入前几个字符后,可以按Ctrl + P,或者ctrl + N,打开自动完成的下拉菜单。
比如,
输入print,按ctrl+p,将提示可选择printing, printf, prints函数。
语法高亮
打开/关闭语法高亮
:sy on/off
保存你的设置
一般的显示设置等等,都是只在当前打开的vim中生效的,如果你需要使以后打开的vim都使用一些配置,你可以把他们写入~/.vimrc文件. 比如我的~/.vimrc文件,很多行。。将默认显示行数,默认加载本路径下的cs文件等等都做了自动设置。并将其保存在dropbox中。这样在其他机器上,我随时可以复制这个文件,将vim设置为自己习惯的模式。
:se nu :cs add ./cscope.out :se ts=4 :set expandtab