深入帮助

回忆上节课内容

  • 上次制作了 oeasy.txt
  • vim oeasy.txt 打开了文件
  • :f[ile] 查询了当前文件 的信息
  • 正常模式或命令模式(Normal mode) 切换到 命令行模式 (Command-Line mode) 要使用 :
  • 命令行模式(Command-Line mode) 按 回车 执行命令,执行完了就回来了

  • 我们已经可以在两个模式(命令模式底线命令模式 模式)之间切换
  • 我们这次想要了解更多的帮助信息

运行帮助

vim 中运行 :help

  • 我们可以使用 h、j、k、l 进行移动
  • 方向如上图所示
  • 这个时候 hjkl 不是输入字符而是移动方向的命令
  • 不光是这四个字符
  • 所有的键盘字符都对应命令
  • 这就是为什么默认的正常模式 (Normal mode) 也被称作命令模式

命令模式

  • 命令模式可以直接按键来执行命令
  • 比如移动
  • 还有很多各种命令

  • 命令模式 (Normal mode) 和 命令行模式 (Command-Line mode) 不同

    • 命令模式 (Normal mode) 直接按键执行
    • 而命令行模式 (Command-Line mode) 在底部行输入命令后按 回车 执行
  • 模式不同,对应的操作不同
  • 这也是 vim 上手最难的原因

学习曲线

  • vim 是公认的非常陡峭的学习曲线
  • 不过突破上去了之后,效率是相当高的
  • 多易必多难
  • 最开始看起来容易的东西,比如 ide
  • 什么都给你配好了,但是你对于底层完全失去了理解和控制,到最后反而是最难
  • 我们一点点翻越这陡峭的山,征服 vim

但是为什么是 h、j、k、l 对应方向呢?

起源

  • vim 起源于 vi
  • vi 早期是 Bill Joy 在 adm3A 上制作和使用的
  • adm3A 是一台终端
  • adm3A 的键盘没有方向键
  • 所以这个习惯就延续的到了今天️

  • 我们可以看到上图键盘上的 h、j、k、l 按键上面对应的方向

现在还需要用 h、j、k、l 按键控制光标么?

键盘核心区

是的! 现在还可以使用 h、j、k、l 按键控制光标。

  • 在使用 vim 时,咱们可以把手放在键盘核心区有助于提高效率

    • 将左手食指放在 f 上
    • 将右手食指放在 j 上

在上面图片中展示的现代 101 键盘中有加入了方向键:

  • 在右手的右下面的非核心区
  • 笔记本键盘方向键也需要物理移动手的位置
  • 所以这种移动会降低效率,那我们能用鼠标定位么?

使用鼠标

想在 vim 中使用鼠标控制,我们先需要进行基本的配置:

  • 首先我们在 vim 中搜索帮助,输入 :h mouse,可以看到如下图所示的界面:

  • 现在我们进行主题设置
  • 从上图中我们可以看到,vim 提示我们执行 :set mouse=a,就可以用鼠标了!!!

    • 我们可以使用鼠标移动光标
    • 使用滚轮可以翻页
    • 还可以使用鼠标点击相关的主题链接

这些现代科技真的很不错,使用鼠标后操作更便捷了,但是鼠标其实会更影响效率,因为鼠标会让我们的手离开键盘。

然而 vi 就是想让用户可以实现,手不离开键盘核心区域就完成所有的编辑工作:

  • 方向移动是最常用的操作
  • 他想让你相对灵活的右手位置在键盘核心区完全不动
  • 只需要按下手指就完成相应的移动操作
  • 而且比鼠标还快速

位置记忆

  • 用 l 来表示右边很难记忆
  • 怎么办呢?有用户想到了这个

  • 东 洛杉矶
  • 南 爪哇岛
  • 西 黄河
  • 北 共青城

  • 用熟了其实很简洁
  • 逐渐将操作变成肌肉记忆,不要走脑子

现在我们有一个新问题,当年在没有鼠标的时候,Bill Joy 是如何跳转超链接主题的呢?

键盘跳转

  • 运行 :help 回到主题开头
  • 我们可以看到 bars 这样的链接
  • 使用 h、j、k、l 移动光标
  • 把光标移动到链接上
  • 是 ctrl+] 就可以跳入链接
  • ctrl+o 可以跳出链接,回到原位置 older position
  • 我们可以试试反复跳跃‍♀️

两套手册

  • 在翻阅 vim 的 manual 的时候
  • 我们发现 vim 有两套 manual

用户手册

  • 一套是用户手册

    • 像一本书一样
    • 从头读到尾
    • 从简单到复杂
    • 适合初学

引用手册

  • 另一套是引用手册

    • 精确的描述每个主题
    • 以及主题内容是如何工作的
    • 适合查询

总结

  • 我们这次看了

    • 正常模式
    • 命令行模式
    • 以及他们切换的方式
  • 了解了帮助文件的正确打开方式
  • h、j、k、l 命令的历史来源
  • 在文档中使用鼠标(并不建议)
  • 使用全键盘方式跳入跳出超链接
  • 帮助文件的两种手册
  • 不过说到这里我们还是没改文档啊啊啊啊!
  • 好饭不怕晚?
  • 我们下次再说!

oeasy教您玩转vim - 4 - # 深入帮助的更多相关文章

  1. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  2. oeasy教您玩转vim - 57 - # 行可视化

    ​ 可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...

  3. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...

  4. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  5. oeasy 教您玩转linux010101查看内核uname

    linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...

  6. oeasy教您玩转linux010202软件包管理apt

    顾一下 上一部分我们都讲了什么?

  7. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

  8. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  9. oeasy教您玩转python - 006 - # hello world

    ​ Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...

  10. oeasy教您玩转linux-010110内容回顾

    我们来回顾一下 我们都讲了什么?

随机推荐

  1. keycloak~正确让api接口支持跨域

    相关参考 https://leejjon.medium.com/how-to-allow-cross-origin-requests-in-a-jax-rs-microservice-d2a6aa2d ...

  2. Linux系统编程(十)线程池

    #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h& ...

  3. 莫烦tensorflow学习记录 (5)什么是过拟合 (Overfitting)

    什么是过拟合 (Overfitting) 莫烦讲的非常通俗易懂可以看看https://mofanpy.com/tutorials/machine-learning/tensorflow/intro-o ...

  4. 记 Codes 开源免费研发管理平台 —— 日报与工时融合集中式填报的创新实现

    继上一回合生成式全局看板的创新实现后,本篇我们来讲一讲日报与工时融合集中式填报的创新实现. 市面上所有的研发管理软件,大多都有工时相关功能,但是却没有日报功能,好像也没什么问题,但是在使用过程中体验非 ...

  5. MyBatis实现MySQL表字段及结构的自动增删

    前言 在开发过程中,总会涉及到数据库表结构字段的增加或者删除,或者是索引的增加和减少,这个时候能把修改表结构字段这些工作都交给程序来进行,那能大大方便开发.正好有一个现成的工具可以在springboo ...

  6. 一文了解JVM(中)

    HotSpot 虚拟机对象探秘 对象的创建 Header 解释 使用 new 关键字 调用了构造函数 使用 Class 的 newInstance 方法 调用了构造函数 使用 Constructor ...

  7. C# .NET6 .NET CORE EXCEL 导入和导出

    使用NPOI导入.xlsx遇到"EOF in header"报错,网上找好很多方法,没解决,最后换成EPPlus.Core导入. 导出默认是.xls. NPOI 操作类: usin ...

  8. 🌟 简单理解 React 的 createContext 和 Provider 🚀

    在 React 应用中,我们经常需要在组件之间共享状态和数据.而 React 的 createContext 和 Provider 就是为了解决这个问题而诞生的. createContext:创建自定 ...

  9. Linux实时查看Java接口数据

    1.Linux实时查看Java接口数据的方法 在Linux系统中实时查看Java接口数据通常涉及几个步骤: (1)编写Java应用程序:首先,我们需要有一个Java应用程序,它暴露了一个或多个HTTP ...

  10. 剖析 Kafka 消息丢失的原因

    目录 前言 一.生产者导致消息丢失的场景 场景1:消息体太大 解决方案 : 1.减少生产者发送消息体体积 2.调整参数max.request.size 场景2:异步发送机制 解决方案 : 1.使用带回 ...