Vim - 标记
Vim - 使用标记 (Marks) 快速导航 (Quick Navigation)
Section titled “Vim - 使用标记 (Marks) 快速导航 (Quick Navigation)”Vim 的标记(marks)功能允许你在文件中设置书签(bookmarks)或路标(waypoints)。这使得你可以快速跳转回文件内的特定位置(locations),甚至跨越不同的文件(files),极大地加快了在大型项目(projects)或复杂文档(documents)中的导航(navigation)速度。
本章包含:
- 创建本地标记 (local marks) 和全局标记 (global marks)。
- 跳转到标记 (marks)。
- 列出现有标记 (marks)。
- 删除标记 (marks)。
标记 (Marks) 的类型 (Types)
Section titled “标记 (Marks) 的类型 (Types)”Vim 支持几种类型的标记(marks):
- 小写标记 (Lowercase marks) (a-z): 局限于单个缓冲区(buffer)(文件)。每个缓冲区可以有自己的一套 26 个小写标记。除非保存在
viminfo文件中,否则当缓冲区关闭时,这些标记会丢失。 - 大写标记 (Uppercase marks) (A-Z): 全局的(Global),也称为文件标记(file marks)。它们存储文件(file)以及文件内的位置(position)。如果
viminfo配置正确,它们会在 Vim 会话之间持续存在。你可以从任何缓冲区(buffer)跳转到文件标记。 - 数字标记 (Numeric marks) (0-9): 由 Vim 在写入
viminfo文件时自动设置,存储最近编辑文件中的位置(positions)。标记0是上次退出文件中的位置。 - 特殊标记 (Special marks): 由 Vim 预定义(例如,
.表示上次编辑的位置 last edit,'表示上次跳转前的位置 position before last jump,<和>表示上次可视选择(last visual selection)的开始/结束位置)。
创建标记 (Marks)
Section titled “创建标记 (Marks)”在普通模式(Normal mode)下创建标记(mark),使用 m 命令,后跟标记字符(mark character)(a-z 用于本地标记 local,A-Z 用于全局标记 global)。
m{mark-character}示例:
ma- 在当前文件的当前光标位置(current cursor position)设置本地标记 ‘a’。mM- 在当前光标位置设置全局标记 ‘M’,并关联当前文件(current file)。
设置标记不会移动光标(cursor)。
跳转到标记 (Marks)
Section titled “跳转到标记 (Marks)”设置标记后,你可以使用反引号(`)或单引号(‘)后跟标记字符(mark character)来跳转到该标记。
| 命令 Command | 描述 Description |
|---|---|
`{mark-character}(反引号 backtick) | 将光标(cursor)移动到标记(mark)设置时的确切行(line)和列(column)。 |
‘{mark-character}(单引号 single quote) | 将光标移动到标记(mark)设置所在行的开头(第一个非空字符 beginning (first non-blank character))。 |
示例:
`a- 跳转到本地标记 ‘a’ 的确切位置。‘M- 跳转到全局标记 ‘M’ 所在行的开头(如果该文件当前未打开,可能会打开它)。“- 跳转到上次跳转(latest jump)前的确切位置(类似于 Ctrl+O,但专门用于上一个位置)。”- 跳转到上次跳转(latest jump)前所在行的开头。
列出所有标记 (Marks)
Section titled “列出所有标记 (Marks)”要查看当前设置的所有标记(本地 local、全局 global 和一些特殊标记 special ones)的列表,使用 :marks 命令:
:marks这将显示一个列表,显示标记字符(mark character)、行号(line number)、列号(column)和文件名(filename)(尤其是全局标记 global marks)。例如:
mark line col file/text ' 14 0 # Previous jump a 5 10 print('Hello') M 73 4 /home/user/project/main.py你也可以列出特定的标记:
:marks aM删除标记 (Marks)
Section titled “删除标记 (Marks)”要删除一个或多个标记(marks),使用 :delmarks 命令:
:delmarks {mark-characters}示例:
:delmarks a- 删除本地标记 ‘a’。:delmarks xyz- 删除本地标记 ‘x’、‘y’ 和 ‘z’。:delmarks a-d- 删除本地标记 ‘a’、‘b’、‘c’ 和 ‘d’。:delmarks AB- 删除全局标记 ‘A’ 和 ‘B’。:delmarks!- 删除当前缓冲区(current buffer)的所有小写标记(a-z)。(注意:默认情况下这不会删除全局标记 global marks;请参阅:help :delmarks!获取更多细微之处)。
全局标记(Global marks)通常保存在 viminfo 文件(通常是 ~/.viminfo)中。如果你删除一个全局标记,下次 Vim 写入 viminfo 文件时,它也会从其中被移除。
实际应用:标记(Marks)对于以下情况极其有用:
- 在大型文件(file)中快速导航函数定义(function definition)及其调用位置(call sites)。
- 在执行复杂操作(complex operation)之前设置一个临时占位符(temporary placeholder),以便轻松返回(return)。
- 使用全局标记(global marks)在项目(project)中频繁访问的文件(files)之间跳转。