Vim在文件中跳转
在文件中跳转
Tip 55 Traverse the Jump List
遍历跳转列表
Vim 在跳转之前和之后记录我们的位置,并提供一些命令来回溯我们的步骤,类似于Web浏览器中的前进和后退。对vim来说:
< C - o > - 后退, 跳转到上一个位置
< C - i > - 前进, 后退之后就可以往前了
:jumps
命令可以查看跳转列表,效果类似于 :ls
跳转位置的定义:Any command that changes the active file for the current window can be described as a jump.
任何更改当前窗口的活动文件的命令都可以描述为跳转。Vim 会把执行跳转命令之前和之后的光标位置,记录到跳转列表中。例如:
如果我们运行:edit
命令打开了一个新文件,那么就可以用 <C-o> 和 <C-i>
命令在这个新文件以及原本的文件之间来回跳转。
用[count]G
命令直接跳到指定的行号也会被当成一次跳转,但每次向上或向下移动一行则不算。面向句子的动作及面向段落的动作都算跳转,但面向字符及面向单词的动作则不算。用一句话来概括,我们可以说大范围的动作命令可能会被当成跳转,但小范围的动作命令则只能算移动。
下表节选了一些跳转动作:
[count]G | 行跳转 |
---|---|
/pattern |
跳转到 下一个/上一个 匹配的 pattern 位置 |
n / N | 同上 |
% | 跳转到 配对的括号位置 () [] {} <> |
( / ) | 跳转到 前/后 一句内容 |
{ / } | 跳转到 前/后 一段内容 |
H / M / L | 跳转到 上/中/下 屏幕 |
gf | 跳转到 光标处的文件 |
<C-]> | 跳转到 光标处关键词定义的地方 |
`{mark} / ‘{mark} | 跳转到 标记 / 标记非空白行首 位置 |
Vim 可以同时维护多份跳转列表。实际上,每个单独的窗口都拥有一份自己的跳转列表。如果你正在使用分割窗口或多标签页,那么
注意:试着在插入模式中按一下 < C- i >,你会发现这和按
因为 Vim 本来就把
Tip 56 Traverse the Change List
遍历改变列表
每当对文档做出修改后, Vim 都会记录当时光标所在的位置。遍历改变列表的方法很简单,并且这大概是跳到你要去的地方的最快方式。
撤销/重做 命令:
u - 撤销变更 (相当于 win <C - z>)
- 撤销之前的撤销 (相当于 win <C - y>)
Vim 会在编辑会话期间维护一张表,里面记载我们对每个缓冲区所做的修改,此表就是所谓的改变列表,使用 :change
命令可以查看其内容。
Vim 为每次修改都记录了行号与列号,我们可以用 g; 和 g,
命令反向或正向遍历改变列表。可以拿; 和 ,
命令当参考,来帮你记忆 g; 与 g, 命令。前两条命令分别用来正向及反向重复 f{char} 命令,加上g前缀。
标识上次修改方位的位置标记,Vim 会自动创建一些位置标记,它们是对改变列表的一个有用补充。
`. 标记总是指向上次修改的位置
`^ 标记则会指向上次退出插入模式时光标所在的位置 ( gi 命令)
Vim 会为编辑会话中的每个单独缓冲区维护一个改变列表,而与之不同的是,每个窗口都会创建一个单独的跳转列表。
在大多数场景下,跳转到 `` . 的效果与使用
g; 命令相同。不过位置标记只指向最后修改的位置,而改变列表中则保存了多组位置。我们可以多次按 g; 命令,每次它都会把我们带到改变列表中较早的一个位置,而
. 则总是把我们带到改变列表的最后一项。
``^ 标记指向上次插入的位置,它比上次修改的位置更具体一点。如果我们先退出插入模式,接着又在文档中四处移动,然后,当我们又想快速回到退出的地方继续编辑时,用 **gi (g前缀 i插入**)命令就行了。此命令会用
^ 标记恢复光标位置,并切换到插入模式,这真是省时省力的好办法!
Tip 57 Jump to the Filename Under the Cursor
跳转到光标下的文件
Vim 将文档中的文件名视为一种超链接。如果配置正确, 我们可以使用 gf
命令转到光标下的文件名。
指定文件的扩展名
suffixesadd
选项允许我们指定一个或多个文件扩展名,当 Vim 用 gf
命令搜寻文件名时,会尝试使用这些扩展名。
1 | :set suffixesadd+=.rb //添加.rb的文件扩展名 |
每次用 gf 命令时, Vim 都会在跳转列表中增添一条记录,因此我们总是可以用**
指定要搜寻的目录
引用的文件不位于工作目录的相对路径中,要引用第三方库的时候,需添加路径path
。我们可以把它配置成一个以逗号分隔的目录列表。 当使用 gf
命令时, Vim 会检查path
列表中的每一个目录,看看该目录中是否包含一个匹配光标下文本的文件名。path
设置也会作用域 :find
命令
1 | :set path+=app/** //添加路径 |
Tip 58 Snap Between Files Using Global Marks
用全局位置标记在文件间快速跳转
标记语法 m{letter}
- m[a-z] - 小写字母的, 创建一个可以在当前文件(缓冲区)进行跳转的标签
- m[A-Z] - 大写字母的, 创建一个可以全局的标签, 可以在多个文件之前跳转
跳转语法 `{letter}
编码之前设置全局标记,全局标记在多个文件切换时非常有用。