VIM - 标记基础

  1. 概述

    1. vim 标签
    2. 感觉有点复杂, 应该会重构
  2. 背景

    1. 编辑文档时, 有时候需要在几个 点 来回跳转
      1. 单纯的 移动, 需要费神去找
      2. 精确的 搜索, 又要输入太多的字符
      3. ctrl + o 和 ctrl + i, 我又用不好, 这种跳转, 类似于链表
    2. 我需要一个 相对方便 的跳转办法
      1. 听说 标记 挺好用的, 我想试试
  3. 环境

    1. OS
      1. win10
    2. shell
      1. mintty-2.9.4
  4. 疑问

    1. 查看的方式
    2. 每项的意义
    3. 跳转
      1. 跳转的区别
    4. 设定
    5. 0-9 的设定与意义

1. 标记

  1. 概述

    1. 标记
  2. 标记

    1. 指定 特定文本 中, 一个 特定的位置
      1. 可以给 包括 26 个字母等 指定标记
    2. 可以通过 一定的操作, 跳转到 标记的位置
  3. 相关操作

    1. 查看
    2. 跳转
    3. 创建
    4. 修改
    5. 删除

2. 操作们

  1. 概述

    1. 简单描述操作
  2. 说明

    1. 暂时只涉及 单个文件内 的标记操作

1. 查看

  1. 概述

    1. 查看 当前的 标记
  2. 操作

    1. 进入 ex 命令 模式

      1. 这个应该都会...
    2. 输入命令

      # 不要输入成 mark, 这两个不一样
      # 输入后, 显示 当前时刻 标记的情况
      # 按 enter 后会直接退出
      marks
      
  3. 结果

    :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 后会直接退出
    
    
  4. 解释

    1. :marks

      1. 这个是 命令模式下 输入的命令
    2. ' 1 0 # blog01

      1. '

        1. 单引号
        2. 表示 标记 ' 对应的位置
      2. 1

        1. 行号
      3. 0

        1. 列号
      4. # blog01

        1. 文件/文本
        2. 格式
          1. 文件

            1. 显示 具体路径
            2. /E/notes/2020-06-10/2020-06-10.md
            3. 这种通常会 跳到别的文件里
          2. 文本

            1. 显示 文本内容
            2. # blog01
            3. 这种就是 当前文件
    3. 标记 - 这里只是一个 列举, 后面会 选取一些 进行讲解

      1. '
        1. 上一个跳转点
        2. 这个可以 手动设置, 也可以 自动改变
      2. 0-9
        1. 这个是 最近的 访问记录
          1. 目标点通常都是 别的文件
      3. "
        1. 上次退出时, 停留的位置
      4. []
        1. 上一次修改的 开始/结束
      5. ^
        1. 最近插入 的位置
      6. .
        1. 最近编辑的位置
      7. <>
        1. 上一次 v 模式下, 选定内容的 开始/结束
    4. 其他问题

      1. session

        1. 标记 和 session 有关
        2. 不同 vim session, 可能会出现 不同的标记
      2. 查看单个标记

        # ex 命令行
        # 查看单个标记 a
        :marks a
        

2. 跳转

  1. 概述

    1. 标记的 跳转
    2. 本来不想这么早讲的, 但是后面又要用
  2. 跳转

    1. ` 跳转

      1. 操作

        1. 精准跳转到 指定标记 的位置
      2. 指令

        # 假设要跳转到 标记a
        # 找到某点, 标准模式 下, 输入 ma, 则 定义了 标记a 点
        # 跳转也要在 标准模式
        `a
        
    2. ' 跳转

      1. 操作

        1. 跳转到标记所在 行首
      2. 指令

        # 假设要跳转到 标记a行首
        # 其他同 ` 相似
        'a
        

3. 创建

  1. 概述

    1. 创建标记
  2. 标记分类

    1. 分类
      1. 常规标记
        1. 使用 A-Za-z 字符集创建的标记
        2. 通常是由 用户 维护
      2. 特殊标记
        1. 一些 特殊的标记
        2. 通常是由 vim 自己维护

1. 常规标记

  1. 创建步骤

    1. 切换到 标准模式 下
    2. 将 光标 移动到 想要标记的位置
    3. 设置标记
      1. m +
  2. 验证结果

    1. 切换到 命令模式

    2. 输入

      :marks <key>
      
    3. 如果查到结果, 则设置成功

  3. key

    1. 范围
      1. a-z
        1. 当前文件内
        2. 如果换了文件, 就会变化
      2. A-Z
        1. 跨文件
        2. 就算跳转到 其他文件, 也能用 A-Z 的标记跳回来

2. 特殊标记

  1. 概述

    1. 特殊标记
  2. 标记 ` 和 '

    1. 概述

      1. 记录 之前的位置
    2. 之前的位置

      1. 也不会 完全记录
      2. 需要一些 特殊动作, 来触发
    3. 触发动作1: 跳转到另一个标记

      1. 操作
        1. 当前是 标准模式
          1. 可以查看一下 marks 命令
        2. 跳转到 某个标记
          1. 再次查看 marks
      2. 结果
        1. 跳转到标记 这个动作, 触发了 ` 标记的改变
        2. 变为了 跳转前 的位置
    4. 触发动作2: /搜索

      1. 操作
        1. 当前是 标准模式
          1. 可以查看一下 marks 命令
        2. \ 搜索到 某个位置
          1. 再次查看 marks
      2. 结果
        1. 跳转到标记 这个动作, 触发了 ` 标记的改变
        2. 变为了 跳转前 的位置
    5. 触发动作3: gg/G

      1. 操作
        1. 当前是 标准模式
          1. 可以查看一下 marks 命令
        2. 输入 gg/G
          1. 再次查看 marks
      2. 结果
        1. 跳转到标记 这个动作, 触发了 ` 标记的改变
        2. 变为了 跳转前 的位置
    6. 不会触发

      1. hjkl 方向移动
      2. f 的行内查找
      3. ctrl + f/b 翻页
      4. 欢迎补充...
    7. 手动调整

      1. 操作
        1. 当前是 标准模式
          1. 可以查看一下 marks 命令
        2. 输入 m`
          1. 再次查看 marks
      2. 结果
        1. 光标没有跳转
        2. 但是 ` 的位置变了
    8. 关于 ' 标记

      1. 和 ` 一样
        1. 共用一个 位置
        2. 其实是 ` 借用了 ' 的位置
  3. 0-9

    1. 概述

      1. 数字标记
    2. 位置

      1. .viminfo 里
        1. 具体在哪里, 我也不清楚
        2. 我用 vim, txt 都看了, 注释都是乱码
        3. 但是格式上是能认出来, 它就是 mark 的
    3. 疑问

      1. 具体怎么生成的, 这个机制, 我没搞懂
  4. "

    1. 概述

      1. 进入文件时, 光标的位置
    2. 机制

      1. 记录 进入文件 的位置
      2. 无法改动
  5. []

    1. 概述

      1. 上次 编辑/复制 段落 的 开头/解位
      2. 指定位置
    2. 触发动作1: 编辑

      1. 操作

        1. 编辑某块区域
        2. 退出 插入模式
      2. 结果

        1. 查看 marks, [ 和 ] 改变了
    3. 触发动作2: 复制

      1. 操作

        1. 复制某块区域
      2. 结果

        1. 查看 marks, [ 和 ] 改变了
    4. 手动修改

      1. 操作

        1. 和 指定常规标记一样
      2. 结果

        1. [ 和 ] 被修改了
  6. ^

    1. 概述

      1. 记录上次退出 插入模式 的位置
    2. 触发动作

      1. 操作

        1. 进入 插入模式
        2. 退出 插入模式
      2. 结果

        1. 查看 marks, 标签改变
    3. 其他

      1. 标准模式下, gi 命令, 会跳转到这个位置
  7. .

    1. 概述

      1. 记录上次 编辑 的位置
    2. 触发动作

      1. 操作

        1. 编辑内容
          1. 甚至不需要 插入模式
      2. 结果

        1. marks 查看标记, . 标记改变
    3. 其他

      1. 标准模式下, g; 命令, 会跳转到这个位置
      2. 这个命令, 可以多次使用
  8. <>

    1. 概述

      1. 记录上次 v 模式选中的位置
    2. 触发动作

      1. 操作

        1. 进入 v 模式
        2. 选择某段内容
        3. 后续操作, 退出 v 模式
      2. 结果

        1. marks 记录 v 模式下的 开始/结束 位置
    3. 注意

      1. 不同于 []
        1. <> 在 选中内容被删除后, 依然记录位置
        2. [] 在 编辑内容被删除后, 只会记录 行首位置
  9. ()

    1. 概述
      1. 记录当前 光标 所在 句子 的 头/尾
      2. 英语环境下, 比较有用
      3. 所以我就略过了
  10. {}

    1. 概述
      1. 记录当前 光标 所在 段落 的 头/尾
      2. 英语环境下, 比较有用
      3. 所以我就略过了

3. 修改

  1. 概述

    1. 修改 标记
  2. 常规标记

    1. 和 创建 类似, 我就略过了
  3. 特殊标记

    1. 和 创建 类似, 我就略过了

4. 删除

  1. 概述

    1. 删除标记
  2. 删除单个标记

    1. 操作
      1. 命令模式

        :delmarks <marks>
        :delmarks a
        :delmarks a
        :delmarks a-z
        :delmarks \"
        
  3. 删除所有标记

    1. 操作
      1. 命令模式

        :delmarks!
        

3. 闲扯

  1. 总算写完了

    1. 这些东西看明白, 基本的操作, 应该是没问题了
    2. 后续的小尾巴, 应该会比较零散的整理了
  2. 遗憾

    1. 初心还是 写教程
    2. 结果还是 写成了 字典
      1. 看 教程 学东西, 和看 字典 学东西, 完全不一样的好吧
      2. 那些一上来就叫你 啃文档 的人, 我一般都敬而远之
    3. 真的很难得静下心来, 构思一些简单的场景, 把这些概念挨个引入
      1. 我只是尽量 按照一定的逻辑顺序, 让前面的点, 尽量清晰, 可以为后面的点打基础

ps

  1. ref

    1. VIM学习笔记 标记(Mark)

    2. vim help

      命令
      :help marks
      
  2. 后续

    1. exclusive
      1. 学习到了 Vim 中的一个新概念: exclusive 和 inclusive
        1. 有人写了一篇博客, 但还是看的我一头雾水...
        2. 有空我也 学习一下
posted @ 2020-06-13 12:36  轩辕拾銉  阅读(482)  评论(0编辑  收藏  举报