Vim 学习笔记 No.4
移动
有一部分是很基础的,只挑有意思的和不熟悉的写一下。
1 文本对象
可以学着用一下ip
和ap
,有时比 {
和 }
好用。
i
和a
也有差别的。i
仅包括对象,而a
包含了周围的一个空格(对于p
段落来说包含的是空行)。因此,i
适合与c
连用,a
适合与d
连用(试一下就知道了)。
2 标记
m{a-zA-Z}
用字母标记光标所在位置。小写字母尽在此缓冲区有效,大写字母全局有效(可在不同文件之间跳转)。
```{mark}``跳转到标记{mark},'{mark}
跳转到标记但光标位于该行的第一个空白字符,适合用在 Ex 命令中。
自动位置标记:
``
上次跳转之前的位置`.
上次修改的地方`^
上次插入的地方`[
和`]
上次修改或复制开始或结束的地方`<
和`>
上次高亮选区的起始和结束位置
或许给 vimrc 做一个全局 mark 会很方便?没长时间测试,不确定效果。
3 在括号和关键字之间跳转
使用%
在匹配的括号间跳转。
为了能在匹配的关键字之间跳转,比如if
和endif
之间跳转,可以开启自带的 matchit 插件。书上建议使用:
runtime macros/matchit.vim
并确保有
set nocompatible
filetype plugin on
而文档(:h matchit-install)中建议使用
packadd! matchit
实验发现两个都能用。我选择按照文档说的做。
常有需要添加、更改括号的需求,推荐使用 surround.vim 插件。
5 其他一些跳转命令
H
/M
/L
跳到屏幕最上方、中间、下方。
gf
跳转到光标下的文件名(或许可以用在 include 里?感觉很棒棒)。
\<C-]>
退转到光标下关键字的定义之处(用在帮助文档中很方便)。
4 遍历跳转列表
每个窗口都有一份跳转列表,记录了所有的跳转。
\<C-o>
退回一次跳转(注意和``
有所不同),而 \<C-i>
和 \<TAB>
与之互补。
注意 重映射 \<TAB>
键时,\<C-i>
也会被改变。
5 遍历改变列表
每个缓冲区会有一份改变列表。
按g;
和g,
可以正向、反向遍历改变列表(个人感觉用处不大,因为没有快速复位之类的操作)。
如前面所说,使用`.
返回最后一次修改的地方,而`^
返回最后一次退出插入模式的地方(字面意思上的,你按下、 \<ESC>
或者、 \<C-[>
的地方)。更妙的是,gi
可以回到上一次推出插入模式的地方,并进入插入模式继续编辑。