Skip to content

第十章:跳转与标记

写代码时经常有这种场景:你在文件顶部改着改着,忽然想去文件底部确认一个函数的定义, 看完了却发现"我刚才在哪来着?"。或者在几个文件之间来回翻,越翻越乱。

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

Ggg/搜索n`<X>gf 这类"大跳"操作,Vim 都会记进跳转列表, 你可以沿着历史前进后退。

  • Ctrl-o 跳回上一个位置(older)
  • Ctrl-iTab 前进到下一个位置(newer)
  • :jumps 查看跳转列表

注意:连续的 jk 这种小移动不会记入跳转列表,只有"跨越式"的移动才会。这正是 你想要的 —— 跳转列表记录的是"我去过的几个关键地点",而不是每一小步。

在本文件里 /marks 搜索跳到上面,再 G 到底部,然后连按几次 Ctrl-o,感受一下 沿着足迹往回走;再按 Ctrl-i 往回走。

修改列表 changelist

跳转列表记录"去过的位置",修改列表则专门记录"改过的位置"。

  • g; 跳到上一个修改位置
  • g, 跳到下一个修改位置
  • :changes 查看修改列表

在一个大文件里改了好几处,用 g; 就能顺着改动一路回溯,比翻屏找快多了。

在本文件不同位置随手改几个字(记得改完 u 撤销回来),然后按 g; 沿着修改历史 跳跳看。

标记和跳转让你在代码里"来去有痕"。接下来我们把视野从单文件扩展到整个项目。

下一章将介绍多文件搜索与替换。