跳转至

1-2-learn to use Vim editor


[!AI_SUMMARY]-

本文介绍了学习使用 Vim 编辑器的好处和方法。

  • Vim 的优点: 适用于代码编辑,避免鼠标和上下左右键,提高编辑效率。
  • Vim 的学习曲线: 初期学习较难,但掌握后效率大幅提升。
  • Vim 的编辑模式: 普通模式、插入模式、可视模式、选择模式、命令模式、Ex 模式。
  • Vim 的缓存、标签页、窗口: 一个 Vim 会话包含多个标签页,每个标签页包含多个窗口,一个缓存可以在多个窗口打开。

I 为什么学 Vim

放着好端端的类似于 word 以及像我们现在用的 obsidian 软件不用,为什么要学什么 vim 或者说 Emacs 等类似编辑器呢?

写作和写代码其实是两项非常不同的活动。当我们编程的时候,会经常在文件间进行切换、阅读、浏览和修改代码,而不是连续编写一大段的文字。因此代码编辑器和文本编辑器是很不同的两种工具(例如微软的 Word Visual Studio Code。作为程序员,我们大部分时间都花在代码编辑上,所以花点时间掌握某个适合自己的编辑器是非常值得的

missing-semester 上是这么说的,我想这类编辑器意义也正是如此;至于为什么是 vim,理由颇多,读者可以自行了解这类编辑器之间的区别,一个参考是 Stack Overflow 的调查

当然,一个在 Linux 同样使用较多的代替品是 nano这里是一个教程

II Vim 的哲学

Vim 是一个多模态编辑器:它对于插入文字和操纵文字有不同的模式。Vim 是可编程的(可以使用 Vimscript 或者像 Python 一样的其他程序语言Vim 的接口本身也是一个程序语言:键入操作(以及其助记名) 是命令,这些命令也是可组合的。Vim 避免了使用鼠标,因为那样太慢了;Vim 甚至避免用上下左右键因为那样需要太多的手指移动。 这样的设计哲学使得 Vim 成为了一个能跟上你思维速度的编辑器。

更加详细介绍可见维基百科,我们将在下面讲解比较常用的内容。

III 学习曲线

维基百科 上就表明了:

对于大多数用户来说,Vim 有着一个比较陡峭的学习曲线。这意味着开始学习的时候可能会进展缓慢,但是一旦掌握一些基本操作之后,能大幅度提高编辑效率。为了帮助学习,Vim 为初学者准备了 Vim 教学。通常可以在 Unix 系统命令行下输入 "vimtutor" 或者点击 Windows 系统桌面上的 Vim 教学图标进入。在 Vim 用户手册中更加详细的描述了 Vim 的基础和进阶功能。可以在 Vim 中输入 ":help user-manual" 进入用户手册。手册除了原始的英文版本之外,也被志愿者翻译成了各国文字,其中包括中文。新用户也应该学习 Vim 的帮助系统。可以在 Vim 中输入不带参数的 "help" 来阅读主帮助文件

本文是让读者初识Vim,讲解不甚详细,会列出常用项;有所不明所以也算正常,我们将在后面或者是提供的链接中详细进行讲解

其他教程也有不错的,在 CS 自学指南中就有推荐,不加赘述

IV Vim 的接口其实是一种编程语言

Vim 最重要的设计思想是 Vim 的界面本身是一个程序语言。键入操作(以及他们的助记名) 本身是命令,比如说,我们可以用 3j 来讲光标下移三行,而不用将手移动到方向键上并且按三次

这些命令可以组合使用。这使得移动和编辑更加高效,特别是一旦形成肌肉记忆。

V 编辑模式

Vim 的设计以大多数时间都花在阅读、浏览和进行少量编辑改动为基础,因此它具有 6 种基本模式和 5 种派生模式:

在默认设置下,Vim 会在左下角显示当前的模式。Vim 启动时的默认模式是普通模式。通常你会把大部分 时间花在普通模式和插入模式。

你可以按下 <ESC>(退出键)从任何其他模式返回普通模式。在普通模式,键入 i 进入插入模式,R 进入替换模式,v 进入可视(一般)模式,V 进入可视(行)模式,<C-v> (Ctrl-V, 有时也写作 ^V)进入可视(块)模式,: 进入命令模式

基于有些按键经常性使用且仍然不是十分方便(如 Esc,我们可以自定义按键,读者可以自行搜索

V.1 基本模式

V.1.1 普通模式

在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是 Vim 启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式

多数时候你会在普通模式下,使用移动命令在缓存中导航。在 Vim 里面移动也被称为 “名词”, 因为它们指向文字块。

  • 基本移动 :hjkl (左, 下, 上, 右)
  • 词: w (下一个词, b (词初, e (词尾)
  • 行: 0 (行初, ^ (第一个非空格字符, $ (行尾)
  • 屏幕: H (屏幕首行, M (屏幕中间, L (屏幕底部)
  • 翻页: Ctrl-u (上翻, Ctrl-d (下翻)
  • 文件: gg (文件头, G (文件尾)
  • 行数: :{行数}<CR> 或者 {行数}G ({ 行数 } 为行数 )
  • 杂项: % (找到配对,比如括号或者 / / 之类的注释对)
  • 查找: f{字符}, t{字符}, F{字符}, T{字符}
    • 查找 / 到 向前 / 向后 在本行的 { 字符 }
    • ,/ ; 用于导航匹配
  • 搜索 : /{正则表达式} , n / N 用于导航匹配

Vim 强大的编辑能力来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令 "dd" 删除当前行,但是第一个 "d" 的后面可以跟另外的移动命令来代替第二个 "d",比如用移动到下一行的 "j" 键就可以删除当前行和下一行。另外还可以指定命令重复次数,"2dd"(重复 "dd" 两次,和 "dj" 的效果是一样的。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。

在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按 "a"(append/追加)键或者 "i"(insert/插入)键。

V.1.2 插入模式

在普通模式中,键入 i 进入插入模式。

这时的编辑器和我们平时使用的基本相同。但是所有你需要用鼠标做的事,你现在都可以用键盘:采用编辑命令和移动命令的组合来完成。这就是 Vim 的界面开始看起来像一个程序语言的时候。Vim 的编辑命令也被称为 “动词”,因为动词可以施动于名词

  • i 进入插入模式
    • 但是对于操纵 / 编辑文本,不单想用退格键完成
  • O/ o 在之上 / 之下插入行
  • d{移动命令} 删除 { 移动命令 }
    • 例如,dw 删除词 , d$ 删除到行尾 , d0 删除到行头。
  • c{移动命令} 改变 { 移动命令 }
    • 例如,cw 改变词
    • 比如 d{移动命令} i
  • x 删除字符(等同于 dl
  • s 替换字符(等同于 xi
  • 可视化模式 + 操作
    • 选中文字 , d 删除 或者 c 改变
  • u 撤销 , <C-r> 重做
  • y 复制 / “yank” (其他一些命令比如 d 也会复制)
  • p 粘贴
  • 更多值得学习的 : 比如 ~ 改变字符的大小写

在这个模式中,大多数按键都会向文本缓冲区中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。

在插入模式中,可以按 ESC 键回到普通模式。

V.1.3 可视模式

这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim " 文本对象 " 也能和移动命令一样用在这个模式中

  • 可视化:v
  • 可视化行: V
  • 可视化块:Ctrl+v

可以用移动命令来选中

V.1.4 选择模式

这个模式和无模式编辑器的行为比较相似(Windows 标准文本控件的方式。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim 会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

V.1.5 命令模式

在普通模式下键入 : 进入命令模式。 在键入 : 后,你的光标会立即跳到屏幕下方的命令行。 这个模式有很多功能,包括打开,保存,关闭文件,以及 退出 Vim

  • :q 退出(关闭窗口)
  • :w 保存(写)
  • :wq 保存然后退出
  • :e {文件名} 打开要编辑的文件
  • :ls 显示打开的缓存
  • :help {标题} 打开帮助文档
    • :help :w 打开 :w 命令的帮助文档
    • :help w 打开 w 移动的帮助文档

V.1.6 Ex 模式

这和命令模式比较相似,在使用 ":visual" 命令离开 Ex 模式前,可以一次执行多条命令

V.1.7 扩展

V.1.7.1 计数

你可以用一个计数来结合“名词”和“动词”,这会执行指定操作若干次。

  • 3w 向后移动三个词
  • 5j 向下移动 5
  • 7dw 删除 7 个词
V.1.7.2 修饰语

你可以用修饰语改变“名词”的意义。修饰语有 i,表示“内部”或者“在内”,和 a, 表示“周围”。

  • ci( 改变当前括号内的内容
  • ci[ 改变当前方括号内的内容
  • da' 删除一个单引号字符串, 包括周围的单引号

V.1.8 演示

missing-semester 给我们举了一个实例并给出了详细的步骤,请读者自行学习,这一段建议观看 Youtube 视频,视频非常友好地在右下角给出了当时按键及其顺序。

VI 缓存, 标签页, 窗口

Vim 会维护一系列打开的文件,称为“缓存”。一个 Vim 会话包含一系列标签页,每个标签页包含 一系列窗口(分隔面板。每个窗口显示一个缓存。跟网页浏览器等其他你熟悉的程序不一样的是, 缓存和窗口不是一一对应的关系;窗口只是视角。一个缓存可以在多个窗口打开,甚至在同一个标签页内的多个窗口打开。这个功能其实很好用,比如在查看同一个文件的不同部分的时候。

Vim 默认打开一个标签页,这个标签也包含一个窗口。

VII 扩展资料

其他还有关于 vim 的讲解,但我似乎看不太懂,放着放着,先等把上面理解吧。

$$

评论