Vim 学习笔记 No.4

移动

有一部分是很基础的,只挑有意思的和不熟悉的写一下。

1 文本对象

可以学着用一下ipap,有时比 {} 好用。

ia也有差别的。i仅包括对象,而a包含了周围的一个空格(对于p段落来说包含的是空行)。因此,i适合与c连用,a适合与d连用(试一下就知道了)。

2 标记

m{a-zA-Z}用字母标记光标所在位置。小写字母尽在此缓冲区有效,大写字母全局有效(可在不同文件之间跳转)。

```{mark}``跳转到标记{mark},'{mark}跳转到标记但光标位于该行的第一个空白字符,适合用在 Ex 命令中。

自动位置标记:

  • `` 上次跳转之前的位置
  • `. 上次修改的地方
  • `^ 上次插入的地方
  • `[`] 上次修改或复制开始或结束的地方
  • `<`> 上次高亮选区的起始和结束位置

或许给 vimrc 做一个全局 mark 会很方便?没长时间测试,不确定效果。

3 在括号和关键字之间跳转

使用%在匹配的括号间跳转。

为了能在匹配的关键字之间跳转,比如ifendif之间跳转,可以开启自带的 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可以回到上一次推出插入模式的地方,并进入插入模式继续编辑。

tandf

Tsinghua University, Department of Automation
One thing at a time. One thing done well.