Vim 入门不放弃版
🌚

Vim 入门不放弃版

运行 Vim

Vim 像大多数控制台中的命令行一样,输入 vim 命令后回车就会被执行:
vim
执行后大概率会看到类似这样的界面:
notion image
如果没有看到上面的界面(且非要看看),可以输入下面的命令:
vim -u NONE

退出 Vim

退出 Vim 也很简单(尽管有些特别,以后就知道为什么了):
  1. 先按 Esc
  1. 输入 :q! 按回车
💡
有些时候不需要按 Esc 键,但按一下准没错
notion image

如何输入

当你初次进入 Vim,想要输入内容的时候,大概率你会发现按键失效,此时一定要保持冷静,不要乱按,照下面的步骤来:
  1. 先按一下 i
    1. 如果你在我提醒之前已经乱按过了,没关系,先按下 Esc
    2. 然后再按一下 i
  1. 此时就可以输入文字了(进入了 输入模式
    1. 此时所有输入都将被记录
    2. 直到再次按下 Esc 键(退出 输入模式

Vim 的模式

现在是时候了解一下 Vim 的 模式 概念了,Vim 中有很多 模式,在前面的操作中我们已经接触到了三种模式:
  1. NORMAL 模式
    1. 任何模式下按 Esc 键都会进入该模式
    2. 包括 NORMAL 模式本人(所以按多少次 Esc 都没关系,不确认就多按几次)
    3. 此时 Vim 会等待输入操作指令,比如移动光标、复制 / 粘贴 / 删除 文本(马上会讲到)
  1. INSERT 模式
    1. 就是上一节中按下 iinsert)键进入的模式
    2. 此时会接收内容输入
  1. COMMAND LINE 模式
    1. NORMAL 模式下输入 : 后就进入了 Command-line 模式
    2. 此时 Vim 接受一些内部命令
    3. 回车后即可执行
    4. 💡 还记得是怎么退出 Vim 的吗
💡
若启动时执行了 vim -u NONE 那此时不同模式在 Vim 上可能看不出什么区别,这会非常令人困惑,下面我们用刚刚讲到的 Command-line 模式进行一些设置让 Vim 显示不同模式:
  1. Esc (按一下准没错儿☝🏾
  1. 输入 : 此时已经进入 Command-line 模式
  1. 继续在 : 后面输入 set showmode 按回车
  1. 尝试反复按 iEsc 看看 Vim 的变化
notion image
🚀 拓展学习:
  • 拓展学习是对知识点的详细说明或相关性介绍,初学简单了解一下即可
  • 上面提到的 Command-line 模式下,还可以试试下面这些
    • :set nu (显示行号 number)
    • :set nonu (不显示行号)
    • :set rnu (开启相对行号 related number)
    • :set nornu (关闭相对行号)

移动光标

‼️ Vim 支持方向键移动光标,但这在 Vim 界是一种不耻的行为,所以请慎重。
  1. 也许此时你的 Vim 中没有任何内容,那么,光标是无法移动的,先准备一些内容:
    1. NORMAL 模式下按 i 进入 INSERT 模式
    2. 随意输入文字,回车,文字,回车,文字,回车
    3. 有了几行文字后,按 Esc 退出 INSERT 模式
    4. notion image
  1. 上下左右移动光标对应 k j hl
    1. Vim 按键布局非常合理,四个按键集中在一个区域
    2. 如果觉得不好理解,只记住 jk 也够用了, h l 其实比较少用到
💡
j / k 这种上下移动光标的操作,如今已被视作经典,被很多先锋的应用所继承,例如(Gmail,Linear 等)
  1. 再学几个快速 / 实用的:
    1. b / w 以单词为单位左右移动
    2. gg / G 移动到页首 / 页尾
      1. 没错,有些指令需要多个按键组合
      2. 指令区分大小写 G 需要按 shift g
  1. 有精力可以记一下下面几个指令,不好记可以先不用管:
    1. 0 回到行首
    2. $ 到行尾
    3. 3j 向下移动 3
    4. 2k 向上移动 2
💡
没错,你已经发现了,指令前面可以添加 数字 来限定执行次数,大部分指令都可以这么做,试试给 wb 前面加上数字。本节的重点不是记命令,而是形成「不看鼠标也知道怎么走」的直觉。

文本查找与替换

常用的文本查找有两种方式:
  1. NORMAL 模式下输入 /text 按回车进行查找
    1. 其中 text 就是你要查找的文本内容
    2. n 继续查找下一个
    3. Nshift n 以后不在赘述)查找上一个
  1. 当光标停在任意单词的任意一个字母上时,按 *# 对当前单词进行查找
    1. 注意需要在 NORMAL 模式(以后不特别说明默认是 NORMAL 模式)
    2. 同样按 nN 查找下一个或上一个
🚀 拓展学习
如果你已经实践了上面介绍的内容,可能你已经发现了 *# 的秘密 —— 它们是有方向的,一个是向文件尾搜索,一个是向文件头搜索。
有趣的事情来了,上面讲到的 nN 也是有方向性的,而且两个方向相关的操作是可以组合起来使用的。
  • 当使用 * 进行搜索时,按 n 则继续朝文件尾搜索, N 会向文件头搜索
  • 当使用 # 进行搜索时,按 n 则继续朝文件头搜索, N 会向文件尾搜索

文本的复制 / 删除 / 粘贴

在学习这一节之前,需要先了解(至少应该知道) vim 的 寄存器 概念,在 vim 中不管是复制 / 删除还是剪切,内容都会被保存到寄存器中,可以用于粘贴。
vim 中复制 / 删除 / 粘贴 对应的概念:
  • yank - 复制 y
  • delete - 删除(剪切) d / x
  • put - 粘贴 p / P
所有操作符后面都可以跟随范围描述,操作符前面也可以加数字(理论上数字加在前面或后面效果是一样的)
比如: d3w3dw 结果是一样的
yy 将复制当前行,同样的 dd 将删除(剪切)当前行
两个粘贴操作符的区别在于位置的不同, p 会将内容粘贴在光标后面(如果是整行会粘贴到当前行的下方), P 会粘贴到光标或当前行的前面

文件读写相关命令

 

撤销与重做