一 关于ctags
vim自带ctag插件
在工程当前目录shell 运行 $ctags -R 会在当前目录递归生成一个tags文件
在vim 中运行 :set tags=tags //表示指定当前目录tags文件为读取文件
在vim中运行 :version 可以看到很多关于vim本身的信息 如图:
上图说明了vim读取vimrc配置文件的顺序,打开vim将按照上述顺序查找用户vimrc,并执行所找到的第一个用户vimrc中的命令,忽略其余的用户vimrc。在vimrc中实际上是按先后顺序执行的
如果使用”vim -u filename“命令来启动vim,则会用你指定的filename作为vim的配置文件(在调试你的vimrc时有用);
如果用”vim -u NORC“命令启动vim,则不读取任何vimrc文件:当你怀疑你的vimrc配置有问题时,可以用这种方式跳过vimrc的执行。
查看tags文件可知文件对各个文件中的函数和变量等进行了定位。如果没有则找不到
使用ctags:
ctrl+] 跳转到指定的函数
ctrl+t 和ctrl+]命令相反
:tags 可显示跳转深度具体信息 如下图:
二 vim 快捷键
“:tag func_name“ 跳到函数func_name处。使用tag命令时,可以使用TAB键进行匹配查找,继续按TAB键向下切换。
vim 快捷键:
% 跳到匹配的括号处("{ }""[]""()")也可以匹配if else 等
ctrl+i, tab 跳到下一个跳点
ctrl+o 跳到上一个跳点
# 从光标向后查找整个关键词 (精确完全匹配查找)
g# 可以查找到包含它的单词
*只查找与当前单词精确匹配的单词
g*查找包含当前单词的所有单词
w 跳到下一个单词的开始
e 跳到单词的结束
b 向后跳
r:替换光标所在处的字符。
R:替换光标所到之处的字符,直到按下「ESC」键为止。
「ctrl」+「g」列出光标所在位置 行列
“.” 重复上一次修改
ctrl+r和u相反的动作
y 复制
yy 复制一行
gf跳转到文件(gf将一个字符串当做一个文件在当前文件夹下递归查找)
Visual Mode操作:
ctrl+v 进入基于块的可视模式
v 进入基于字符的可视模式
V 进入基于行的可视模式
c 删除选定的块
ctrl+z 睡眠vim
fg num 反操作 返回vim
fx:向后查找,移动光标到当前行的下一个x处。很明显,x可以是任意一个字母,可以使用“;”来重复上
一个f命令
tx:和上面的命令类似,但是是移动到x的左边一个位置。
Fx:和fx类似,不过是往回找。
Tx: 同上
(小写向后,大写向前)
0: 移动光标到当前行首。
^:移动光标到当前行的第一个字母位置。
$: 移动光标到行尾。
):移动光标到下一个句子。
( : 移动光标到上一个句子。
ma:在当前光标的位置标记一个书签,名字为a。书签名只能是小写字母。你看不见书签的存在,但它确实
已经在那里了。
`a:到书签a处。注意这个不是单引号,它一般位于大部分键盘的1的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
c{motion}:删除motion命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的
字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被
删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。
(c和d用法相似,但会进出插入模式)
VIM是一个绝好的编辑器来写代码,因为它有一些特性是专门为程序员而设。
这里是一些常用的:
]p:和p的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。
试一下!%:匹配花括号,方括号,括号等。在一个括号的上面,然后按%,鼠标就会出现在匹配的另外一
半括号处。
>>:缩进所有选择的代码
<<:和上面类似,但是反缩进
gd:到达光标所在处函数或者变量的定义处。会查找出很多个但是跳转到局部变量的定义处
K:在Man里面查找光标当前所在处的词。
不用ctags的函数跳转(也是字符串查找)
[+ctrl+i 跳转到函数、变量和#define
[+ctrl+d 跳转到#define处
ctrl+i 向前跳到前几次光标位置
ctrl+o 向后跳到后几次光标位置
[[ 用来跳到光标前面的一个函数开始处。如果光标在函数体内的话,那就是所在函数的开始处。
][ 用来跳到光标后面的一个函数结尾处。如果光标在函数体内的话,那就是所在函数的结尾处。
]] 用来跳到光标后面的一个函数开始处。如果光标在函数体内的话,那就是下一个函数的开始处。
[] 用来跳到光标前面的一个函数结尾处。如果光标在函数体内的话,那就是上一个函数的结尾处。
1,先想是想往前跳,还是往后跳?
如果是想往前,就摁 [,如果是想往后,就摁 ],然后指头别松开。
2,再想是想到开始处,还是结尾处?
如果是开始处,就再摁一下。如果是结尾处,就摁另一个键。