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可以回到上一次推出插入模式的地方,并进入插入模式继续编辑。