第十章:跳转与标记
写代码时经常有这种场景:你在文件顶部改着改着,忽然想去文件底部确认一个函数的定义, 看完了却发现"我刚才在哪来着?"。或者在几个文件之间来回翻,越翻越乱。
Vim 提供了一整套"记住位置、快速往返"的机制 —— 标记(Marks)和跳转列表 (Jumplist),让你在大文件、多文件之间穿梭自如。
标记 marks
标记就是给某个位置起个名字,之后随时能跳回来。
m<X>在当前光标位置设置一个名为 X 的标记(X 为 a-z 或 A-Z)`<X>跳到标记 X 的精确位置(行 + 列)'<X>跳到标记 X 所在行的行首:marks查看所有标记
小写标记(a-z)在当前文件内有效,大写标记(A-Z)是全局的,可以跨文件跳转。
注意:`(反引号)跳到精确的行列位置,'(单引号)只跳到行首,别记混了。大写 全局标记特别适合标记你常去的几个文件位置,比如把配置文件入口标成 C。
先在当前位置按
ma设一个标记,然后G跳到文件底部随便逛逛,再按`a看看 是不是精确回到了刚才的位置。
自动标记
Vim 会自动维护几个特殊标记,不需要你手动设置:
`.跳到上一次修改的位置`"跳到上次退出文件时的位置(重新打开文件时很有用)` `跳到本次跳转前的位置(两个反引号,即"回到我跳之前的地方")`[/`]上次复制或粘贴内容的开头/结尾
Tips:`. 巨好用 —— 不管你翻到哪,一下就能回到最后编辑的地方继续干活。
跳转列表 jumplist
像 G、gg、/搜索、n、`<X>、gf 这类"大跳"操作,Vim 都会记进跳转列表, 你可以沿着历史前进后退。
Ctrl-o跳回上一个位置(older)Ctrl-i或Tab前进到下一个位置(newer):jumps查看跳转列表
注意:连续的 j、k 这种小移动不会记入跳转列表,只有"跨越式"的移动才会。这正是 你想要的 —— 跳转列表记录的是"我去过的几个关键地点",而不是每一小步。
在本文件里
/marks搜索跳到上面,再G到底部,然后连按几次Ctrl-o,感受一下 沿着足迹往回走;再按Ctrl-i往回走。
修改列表 changelist
跳转列表记录"去过的位置",修改列表则专门记录"改过的位置"。
g;跳到上一个修改位置g,跳到下一个修改位置:changes查看修改列表
在一个大文件里改了好几处,用 g; 就能顺着改动一路回溯,比翻屏找快多了。
在本文件不同位置随手改几个字(记得改完
u撤销回来),然后按g;沿着修改历史 跳跳看。
标记和跳转让你在代码里"来去有痕"。接下来我们把视野从单文件扩展到整个项目。
下一章将介绍多文件搜索与替换。