转载自:vim 移动跳转
光标移动
h, j, k, l(左下上右)
w, W - 下一个词首(跳过标点)
e, E - 下一个词尾
b, B - 回退一个词(跳过标点)
0 - 到这一行的最开头
^ - 到这一行的非空白最开头
$ - 到这行的行尾
g_ - 到这一行的非空白行为
( - 句首
) - 句尾
段落移动
} - Move to end of next paragraph or code block.
{ - Move to start of previous paragraph or code block.
Ctrl+F - Move forward one screenful.
Ctrl+B - Move backward one screenful.
ctrl+d - 向下翻页(down)
ctrl+u - 向上翻页(up)
H, M, L - 屏幕位置,分别为顶部,中间,尾部
zz - normal模式下区中
ctrl-o zz - insert模式下区中 (利用insert normal模式)
跳转
gg - 到文件头
G - 到文件尾
Ngg - 到N行
NG -
:N -
gi - 返回上一次插入文本的地方。
gd - 跳转到局部定义
gf - 跳转到文件
tag 跳转:
ctrl + ]
ctrl + t
change list 记录文件修改位置,使用 :changes
打印跳转列表
g; - 返回上一个修改位置
g, - 返回下一个修改位置
jump list 记录跳转位置,使用 :ju[mps]
打印跳转列表
ctrl + o - 跳转到 jump list 上一位置
ctrl + i - 跳转到 jump list 下一位置(和ctrl + o配合在代码间跳转)
标记
这是一组很好的文档内标记方法,在文档中跳跃编辑时很有用,m代表mark
ma - 将当前位置标记为a,26个字母均可做标记,mb、mc等等
'a / `a - 跳转到a标记的位置(标记跳转,'a 与 `a 都可以跳转到 a 标记的位置)
标注可以分为以下两类:
a-z
: 仅对当前的一个文件生效,也就意味着只可以在当前文件中跳转A-Z
: 全局标注,可以作用于不同文件。跳转时有可能会切换到另一个缓冲区
除了手动的标记,vim 还有以下内置的标记:
'. - 跳转到最后一次修改的地方(.代表最后一次修改的地方)
'" - 上一次编辑文件的地方
'' - 跳转到上次跳转之前的位置
'^ - 跳转到上次 insert mode 停止的地方
'( - 当前句子的开头
') - 当前句子的结尾
'{ - 当前段落的开头
'} - 当前段落的结尾
'[ - 上一次修改或复制的第一行的第一个字符
'] - 上一次修改或复制的最后一行的最后一个字符
'< - 上一次Visual area的开始位置
'> - 上一次Visual area的结束位置
gv
可以再次 visually select 上次的区域,映射 gp
再次 visually select 上次修改或复制的区域:
nnoremap gp `[v`]
:marks
显示所有的标准,:h mark-motions
获取帮助。
使用 vim-signature 可以让标记可视化
ctags
ctags
可以生成代码的标签文件,vim
可以根据标签文件在代码文件之间跳转查以找特定的 symbol
。
生成标签文件
在当前目录下执行:
$ ctags -R .
为当前目录及其子目录中的代码生成标签文件。-R
表示 recursive
,.
表示在当前目录。
运行完当前目录会多一个文件 tags
,就是代码的索引文件。
跳转
用 vim
打开一个已经建过标签的代码文件
ctrl+] - 找到光标所在位置的标签定义的地方
ctrl+t - 回到跳转之前的标签处
<c-w> + ] - 分屏跳转到定义
<c-w> + } - 预览窗口跳转到定义
<c-w> + z - 关闭预览窗口
此时运行 vim
,必须在 tags
文件所在的目录下运行。否则,运行它会找不到 tags
文件。
可以使用 :set tags=
命令设定 tags
文件的查找路径,其是一个以 ,
分割的列表。
" `./tags;` - 从当前文件目录递归到根目录查找 tags 文件
" `tags` - 在 vim 的当前目录(`:pwd`)查找 tags 文件
set tags=./tags;,tags
可以让生成的 tag 文件名为 .tags,默认隐藏
" `./.tags;` - 从当前文件目录递归到根目录查找 .tags 文件
" `.tags` - 在 vim 的当前目录(`:pwd`) 查找 .tags 文件
set tags=./.tags;,.tags
增加生成 tags 的命令
command! MakeTags !ctags -o .tags -R .