VIM - 标记基础
-
概述
- vim 标签
- 感觉有点复杂, 应该会重构
-
背景
- 编辑文档时, 有时候需要在几个 点 来回跳转
- 单纯的 移动, 需要费神去找
- 精确的 搜索, 又要输入太多的字符
- ctrl + o 和 ctrl + i, 我又用不好, 这种跳转, 类似于链表
- 我需要一个 相对方便 的跳转办法
- 听说 标记 挺好用的, 我想试试
- 编辑文档时, 有时候需要在几个 点 来回跳转
-
环境
- OS
- win10
- shell
- mintty-2.9.4
- OS
-
疑问
- 查看的方式
- 每项的意义
- 跳转
- 跳转的区别
- 设定
- 0-9 的设定与意义
1. 标记
-
概述
- 标记
-
标记
- 指定 特定文本 中, 一个 特定的位置
- 可以给 包括 26 个字母等 指定标记
- 可以通过 一定的操作, 跳转到 标记的位置
- 指定 特定文本 中, 一个 特定的位置
-
相关操作
- 查看
- 跳转
- 创建
- 修改
- 删除
2. 操作们
-
概述
- 简单描述操作
-
说明
- 暂时只涉及 单个文件内 的标记操作
1. 查看
-
概述
- 查看 当前的 标记
-
操作
-
进入 ex 命令 模式
- 这个应该都会...
-
输入命令
# 不要输入成 mark, 这两个不一样 # 输入后, 显示 当前时刻 标记的情况 # 按 enter 后会直接退出 marks
-
-
结果
:marks 标记 行 列 文件/文本 ' 1 0 # blog01 0 74 31 /E/notes/2020-06-10/2020-06-10.md 1 1 0 /E/notes/2020-06-10/demo 2 1 0 /E/notes/2020-06-10/demo 3 1 0 /E/notes/2020-06-10/2020-06-10.md 4 1 0 /E/notes/2020-06-10/2020-06-10.md 5 1 0 /E/notes/2020-06-10/2020-06-10.md 6 1 0 /E/notes/2020-06-10/2020-06-10.md 7 1 0 /E/notes/2020-06-10/2020-06-10.md 8 18 0 /E/notes/2020-06-10/demo 9 18 0 /E/notes/2020-06-10/demo " 1 0 # blog01 [ 1 0 # blog01 ] 66 0 1. [VIM学习笔记 标记(Mark)](https://zhuanlan.zhihu.com/p/25585188) ^ 50 38 # 按 enter 后会直接退出 . 50 35 # 按 enter 后会直接退出 < 50 35 # 按 enter 后会直接退出 > 50 35 # 按 enter 后会直接退出
-
解释
-
:marks
- 这个是 命令模式下 输入的命令
-
' 1 0 # blog01
-
'
- 单引号
- 表示 标记
'
对应的位置
-
1
- 行号
-
0
- 列号
-
# blog01
- 文件/文本
- 格式
-
文件
- 显示 具体路径
/E/notes/2020-06-10/2020-06-10.md
- 这种通常会 跳到别的文件里
-
文本
- 显示 文本内容
# blog01
- 这种就是 当前文件
-
-
-
标记 - 这里只是一个 列举, 后面会 选取一些 进行讲解
'
- 上一个跳转点
- 这个可以 手动设置, 也可以 自动改变
- 0-9
- 这个是 最近的 访问记录
- 目标点通常都是 别的文件
- 这个是 最近的 访问记录
"
- 上次退出时, 停留的位置
[]
- 上一次修改的 开始/结束
^
- 最近插入 的位置
.
- 最近编辑的位置
<>
- 上一次 v 模式下, 选定内容的 开始/结束
-
其他问题
-
session
- 标记 和 session 有关
- 不同 vim session, 可能会出现 不同的标记
-
查看单个标记
# ex 命令行 # 查看单个标记 a :marks a
-
-
2. 跳转
-
概述
- 标记的 跳转
- 本来不想这么早讲的, 但是后面又要用
-
跳转
-
` 跳转
-
操作
- 精准跳转到 指定标记 的位置
-
指令
# 假设要跳转到 标记a # 找到某点, 标准模式 下, 输入 ma, 则 定义了 标记a 点 # 跳转也要在 标准模式 `a
-
-
'
跳转-
操作
- 跳转到标记所在 行首
-
指令
# 假设要跳转到 标记a行首 # 其他同 ` 相似 'a
-
-
3. 创建
-
概述
- 创建标记
-
标记分类
- 分类
- 常规标记
- 使用 A-Za-z 字符集创建的标记
- 通常是由 用户 维护
- 特殊标记
- 一些 特殊的标记
- 通常是由 vim 自己维护
- 常规标记
- 分类
1. 常规标记
-
创建步骤
- 切换到 标准模式 下
- 将 光标 移动到 想要标记的位置
- 设置标记
- m +
- m +
-
验证结果
-
切换到 命令模式
-
输入
:marks <key>
-
如果查到结果, 则设置成功
-
-
key
- 范围
- a-z
- 当前文件内
- 如果换了文件, 就会变化
- A-Z
- 跨文件
- 就算跳转到 其他文件, 也能用 A-Z 的标记跳回来
- a-z
- 范围
2. 特殊标记
-
概述
- 特殊标记
-
标记 ` 和 '
-
概述
- 记录 之前的位置
-
之前的位置
- 也不会 完全记录
- 需要一些 特殊动作, 来触发
-
触发动作1: 跳转到另一个标记
- 操作
- 当前是 标准模式
- 可以查看一下 marks 命令
- 跳转到 某个标记
- 再次查看 marks
- 当前是 标准模式
- 结果
- 跳转到标记 这个动作, 触发了 ` 标记的改变
- 变为了 跳转前 的位置
- 操作
-
触发动作2: /搜索
- 操作
- 当前是 标准模式
- 可以查看一下 marks 命令
- \ 搜索到 某个位置
- 再次查看 marks
- 当前是 标准模式
- 结果
- 跳转到标记 这个动作, 触发了 ` 标记的改变
- 变为了 跳转前 的位置
- 操作
-
触发动作3: gg/G
- 操作
- 当前是 标准模式
- 可以查看一下 marks 命令
- 输入 gg/G
- 再次查看 marks
- 当前是 标准模式
- 结果
- 跳转到标记 这个动作, 触发了 ` 标记的改变
- 变为了 跳转前 的位置
- 操作
-
不会触发
- hjkl 方向移动
- f 的行内查找
- ctrl + f/b 翻页
- 欢迎补充...
-
手动调整
- 操作
- 当前是 标准模式
- 可以查看一下 marks 命令
- 输入 m`
- 再次查看 marks
- 当前是 标准模式
- 结果
- 光标没有跳转
- 但是 ` 的位置变了
- 操作
-
关于 ' 标记
- 和 ` 一样
- 共用一个 位置
- 其实是 ` 借用了
'
的位置
- 和 ` 一样
-
-
0-9
-
概述
- 数字标记
-
位置
- .viminfo 里
- 具体在哪里, 我也不清楚
- 我用 vim, txt 都看了, 注释都是乱码
- 但是格式上是能认出来, 它就是 mark 的
- .viminfo 里
-
疑问
- 具体怎么生成的, 这个机制, 我没搞懂
-
-
"
-
概述
- 进入文件时, 光标的位置
-
机制
- 记录 进入文件 的位置
- 无法改动
-
-
[]
-
概述
- 上次 编辑/复制 段落 的 开头/解位
- 指定位置
-
触发动作1: 编辑
-
操作
- 编辑某块区域
- 退出 插入模式
-
结果
- 查看 marks, [ 和 ] 改变了
-
-
触发动作2: 复制
-
操作
- 复制某块区域
-
结果
- 查看 marks, [ 和 ] 改变了
-
-
手动修改
-
操作
- 和 指定常规标记一样
-
结果
- [ 和 ] 被修改了
-
-
-
^
-
概述
- 记录上次退出 插入模式 的位置
-
触发动作
-
操作
- 进入 插入模式
- 退出 插入模式
-
结果
- 查看 marks, 标签改变
-
-
其他
- 标准模式下, gi 命令, 会跳转到这个位置
-
-
.
-
概述
- 记录上次 编辑 的位置
-
触发动作
-
操作
- 编辑内容
- 甚至不需要 插入模式
- 编辑内容
-
结果
- marks 查看标记, . 标记改变
-
-
其他
- 标准模式下, g; 命令, 会跳转到这个位置
- 这个命令, 可以多次使用
-
-
<>
-
概述
- 记录上次 v 模式选中的位置
-
触发动作
-
操作
- 进入 v 模式
- 选择某段内容
- 后续操作, 退出 v 模式
-
结果
- marks 记录 v 模式下的 开始/结束 位置
-
-
注意
- 不同于 []
- <> 在 选中内容被删除后, 依然记录位置
- [] 在 编辑内容被删除后, 只会记录 行首位置
- 不同于 []
-
-
()
- 概述
- 记录当前 光标 所在 句子 的 头/尾
- 英语环境下, 比较有用
- 所以我就略过了
- 概述
-
{}
- 概述
- 记录当前 光标 所在 段落 的 头/尾
- 英语环境下, 比较有用
- 所以我就略过了
- 概述
3. 修改
-
概述
- 修改 标记
-
常规标记
- 和 创建 类似, 我就略过了
-
特殊标记
- 和 创建 类似, 我就略过了
4. 删除
-
概述
- 删除标记
-
删除单个标记
- 操作
-
命令模式
:delmarks <marks> :delmarks a :delmarks a :delmarks a-z :delmarks \"
-
- 操作
-
删除所有标记
- 操作
-
命令模式
:delmarks!
-
- 操作
3. 闲扯
-
总算写完了
- 这些东西看明白, 基本的操作, 应该是没问题了
- 后续的小尾巴, 应该会比较零散的整理了
-
遗憾
- 初心还是 写教程
- 结果还是 写成了 字典
- 看 教程 学东西, 和看 字典 学东西, 完全不一样的好吧
- 那些一上来就叫你 啃文档 的人, 我一般都敬而远之
- 真的很难得静下心来, 构思一些简单的场景, 把这些概念挨个引入
- 我只是尽量 按照一定的逻辑顺序, 让前面的点, 尽量清晰, 可以为后面的点打基础
ps
-
ref
-
vim help
命令 :help marks
-
后续
- exclusive
- 学习到了 Vim 中的一个新概念: exclusive 和 inclusive
- 有人写了一篇博客, 但还是看的我一头雾水...
- 有空我也 学习一下
- 学习到了 Vim 中的一个新概念: exclusive 和 inclusive
- exclusive
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出