发布于 2026-01-06 0 阅读
0

Vim模式简介 普通模式:概述 普通模式:导航 插入模式:进入/退出插入模式的方法 插入模式:删除 插入模式:从寄存器复制文本 可视化模式:3种高亮显示方式 可视化模式:基本用法 可视化模式:好还是坏? 可视化模式:插入多个文本 总结 资源 DEV全球展示挑战赛 由Mux呈现:展示你的项目!

Vim模式简介

普通模式:概述

普通模式:导航

插入模式:进入/退出插入模式的方法

插入模式:删除

插入模式:从注册表中复制文本

可视化模式:3 种高亮显示方式

可视化模式:基本用法

可视化模式:好还是坏?

可视化模式:插入多段文本

结论

资源

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

关注@learnvim获取更多 Vim 使用技巧!

Vim 的一个独特之处在于它的模式选择。大多数编辑器只有一种模式(插入模式),而 Vim 有六种模式 (普通模式、可视模式、插入模式、命令行模式、选择模式和 ex 模式)。我认为最重要的三种模式是普通模式、插入模式和可视模式。

更正:Vim 8 版本共有七个命令,新增的命令是终端作业模式。来源::h vim-modes-intro

在本文中,我将解释它们的作用以及如何利用它们提高工作效率。

归根结底,最重要的是使用最能提高你工作效率的编辑器。你甚至可能根本不需要 Vim。

普通模式:概述

普通模式是 Vim 的默认模式。你可以把它想象成编辑模式。你可能会问:“为什么不把插入模式也设为默认模式,就像大多数编辑器那样?为什么有人会为了写个文本而额外费劲地切换模式呢?”

如果你编程一段时间了,就会发现程序员大部分时间都在编辑代码,而不是编写代码。因此,文本编辑器的默认设置应该针对编辑进行优化,而不是针对编写。我认为 Vim 在这方面做得很好。

人们可能会觉得普通模式很复杂。我一开始也是。但是,在使用 Vim 一段时间后,我意识到拥有普通模式简直太棒了。

专业提示:如果 Vim 是你的默认编辑器,你应该养成在不打字时习惯性地切换到普通模式的习惯。

普通模式:导航

普通模式可用于在文件内部导航。由于我们大部分时间都花在阅读和搜索上,因此高效的导航是一项必不可少的技能。Vim 导航是一个涵盖面很广的主题,所以这里我只介绍一些基础知识。

Vim 允许你在不同的“对象”之间移动。你可以在字符(h/l)、单词(w/e/b)、行(j/k)、句子())、段落(})、代码块等等之间移动。

Vim 允许你使用 . 跳转到匹配项之间。例如%,如果你在一个 <code> 标签内,你可以使用 . 跳转到括号之间(...)%

我们经常想要跳转到特定的字符串,例如“ function findUser(){...}”。你可以通过搜索/findUser“(n跳转到下一个匹配项)”快速找到它。你也可以使用“f和”进行内联搜索t

我们的导航功能也可以与量词结合使用。

  • 要向前推进 3 个词,www我们可以这样做3w
  • 要向下移动 10 行,jjjjjjjjjj我们可以这样做,而不是10j

有人可能会反对说动作太多,根本记不住——但你不需要一次性全部记住。只需学习你目前需要的那些即可。直到今天,我都没能记住所有的动作,但我仍然会参考它们:h

专业提示:编辑时,留意那些你经常重复的操作。看看有没有更快捷的方法。反复练习,直到你能不假思索地打字为止。

只需几次按键,即可跳转到文件中的任何位置。

  • 你的目标页面大小大约是整个文件的一半吗50%
  • 你的目标是否接近行尾$
  • 你的目标字符是否接近某个特殊字符(例如“z”fz

如果您想了解更多信息,请查看以下资源:

普通模式:语法

普通模式不仅用于导航,也用于编辑。Vim 有 16 个运算符,但你只需要 3 个就足够了:

  • c(改变)
  • d(删除/剪切)
  • y(复制/模仿)

学习 Vim 编辑的错误方法是死记硬背每一个按键组合来学习所有命令,例如:

  • dw删除一个词
  • dd删除一行中的一个单词
  • diw去……呃,是什么来着?

使用运算符的最佳方法是学习 Vim 语法。

Vim 语法只有一条规则:Verb + Noun动词是 Vim 操作符,名词可以是移动指令、文本对象或搜索词。

例如:

  • 删除到行尾d$,遵循语法规则:动词(d)+名词($)。
  • 单词的yiw语法规则是:动词(y)+名词(iw
  • 改为最接近/foo遵循语法规则:动词(c)+名词/foo

学习如何组合 Vim 动词和名词可以为你节省无数的记忆时间。它还能让你独立编写强大的命令。

如果您想了解更多信息,请查看:

专业提示:学习 vim 语法可以让你在记住更少命令的同时,合成强大的指令

普通模式:更改

Vim 可以使用点命令()重复上次更改.

什么是变更?任何内容更新、添加或删除都算作变更。进入插入模式、输入文本以及退出插入模式都算作变更。导航操作不算作变更。例如:

  • dw是一种变化
  • ciw是一种变化
  • 3j4w这不是改变
  • ihello<Esc>是一种变化

点命令 + vim 语法可以提高效率。如果我们执行diw(删除 + 一个单词),并且需要删除另一个单词,只需按下.而不是diw

始终思考:“这个操作可以重复执行吗?” 例如,我需要删除接下来的3个单词。我可以这样做:(d3w删除 + 3个单词)或3dw(删除 + 一个单词,重复3次)。这两者有什么区别?

  • 第一种情况删除了三个单词d3w)。
  • 在第二种情况下,更改是删除一个单词*(dw),重复三次。

这有什么重要性呢?如果你决定再删除两个词呢?如果我们执行了第一个操作(d3w),那么我们的更改是d3w,我们不能这样做,.因为它会删除三个词。如果我们执行了第二个操作(3dw),更改是dw,那么我们可以这样做..

顺便说一下,Vim 的 undo(u)与 change 类似:它可以撤销一次“更改”(顺便说一下,redo 是C-r)。

了解更多信息:

专业提示:时刻留意使用机会,.因为它功能强大,可以帮你节省大量击键次数。寻找可重复更改的选项。

插入模式:进入/退出插入模式的方法

我们来聊聊Vim的第二种模式:插入模式。在此模式下,你按下的任何键都会显示在屏幕上。

进入正常模式有多种方法。标准方法是使用i,但我个人使用以下 6 种方法:

  • i- 在光标前插入文本
  • I- 在同一行的第一个非空字符之前插入文本
  • a- 在光标后插入文本
  • A- 在行尾插入文本
  • o- 在光标下方另起一行,插入文本
  • O- 在光标上方开始新的一行,插入

您还可以将gi文本插入到上次插入文本的位置。

退出插入模式的标准方法是使用 Esc 键。

如果你使用 Vim 编程一段时间后,你会开始觉得Esc按键距离太远。这是 Vi 的创建者 Bil​​l Joy 使用的键盘:

比尔·乔伊键盘

注意按键布局。他的Esc按键大致位于现在 Tab 键的位置。我个人将其映射EscCaps。有些人喜欢使用Space或 ,kj或者jk其他按键。Vim 也允许你使用C-[退出插入模式。你的偏好可能不同。使用你觉得最自然的方式即可。

资源:

专业提示:将您的 Escape 重新映射到容易到达的位置。

插入模式:删除

我们都会犯打字错误。有时我们立刻就能发现,有时则需要一段时间。我们应该切换到普通模式来删除这些打字错误吗?

这取决于错误出在哪里。

  • 如果少于 5 个字符,您可以继续保持在插入模式并开始删除它们。
  • 如果错误只差几个字,切换到正常模式进行修改可能会更快。
  • 如果整行/每个单词输入错误,插入模式允许您进行批量删除:
    • C-w删除整个单词
    • C-u删除整行。

资源:

专业提示:犯了重大错误时,不要养成反复按删除键/退格键的习惯。找到最快的方法来消除错误,然后继续写作

插入模式:从注册表中复制文本

有时你需要从寄存器粘贴内容。与其切换到普通模式粘贴后再切换回插入模式,不如直接在插入模式下粘贴C-r

  • 要提取最新文本,请执行以下操作C-r 0(从 0 注册)
  • 要从“a”寄存器中提取测试,请执行以下操作C-r a

如需了解更多注册信息,请查看:

可视化模式:3 种高亮显示方式

使用可视化模式有 3 种方式:

  • v- 个人视觉模式
  • C-v- 块状可视化模式
  • V- 线状可视化模式

您可以使用此功能gv从上一个位置启动可视化模式。按下Esc此键退出。

资源:

  • :h visual-operators

可视化模式:基本用法

可视化模式的工作方式与大多数编辑器的高亮显示功能类似:

  1. 选中一段文字
  2. 执行操作。

有关可视化模式运算符的列表,请查看:h visual-operators

常见的3种类型是:

  • 改变 (c
  • 删除 (d
  • yank(y)。

我认为以下三点也很有用:

  • 去齿孔(<
  • 缩进( >)
  • 命令行(:

我们来快速演示一下这段文本。我的光标位于行首"echo greetings"

#! /bin/sh
echo greetings
echo vim
echo padawans
Enter fullscreen mode Exit fullscreen mode

使用可视模式:

  • 要删除所有内容"echo",请选中整行(V),向下移动到行(jj),然后删除(d)。
  • 要更改第一行,请选中整行(V),然后更改(c)。
  • 要排序,请选中底部(V2j),然后排序(:sort)。
  • 要缩进前两行,请选中整行和括号 ( Vj) 后面的那一行,然后缩进 ( >)。

可视化模式:好还是坏?

有人反对使用可视化模式,因为它被认为是一种不良习惯

论点如下:使用可视化模式(Vjd)执行的操作也可以不使用可视化模式()执行dj,那么为什么还要增加进入可视化模式的步骤呢?

另一方面,可视化模式也有一些实际用途:如果你正在结对编程,可视化模式可以为你的伙伴提供视觉指示(他/她可以看到你高亮显示的内容。我们在工作中经常结对编程,所以我对此深有体会)。可视化模式还能提供更清晰的视觉辅助,帮助你在执行操作前更好地观察自己的动作。

我个人尽量减少使用可视化模式。本文中展示的所有操作,实际上都可以在不使用可视化模式的情况下完成。最终决定权在你。如果你觉得使用可视化模式效率更高,那就用它。如果你觉得不使用可视化模式效率更高,那就不用它。两种方法都试试,然后再做决定。

资源:

可视化模式:插入多段文本

可视化模式允许您编辑多行。您可以使用分块可视化模式(C-v)进行常规编辑。

假设我有:

const one = 'something'
const two = {some: 'object'}
const three = [1,2,3]
Enter fullscreen mode Exit fullscreen mode

我想;在每个条目的末尾都添加一些内容。以下是使用可视化模式实现的方法:

  1. C-v激活分块可视化模式
  2. 2j向下
  3. $走到尽头
  4. A进入插入模式
  5. 类型;
  6. Esc退出可视化模式。

完成第 6 步后,你会看到它;已插入到所有三行中。

I您可以使用 eithe或.进行多行可视化模式的块级插入A。运算符(删除 ( d)、复制 ( y)、更改 ( c) 等)在这里也适用。

结论

Vim 是一款模态编辑器。如今大多数文本编辑器都是非模态编辑器。作为程序员,我们大部分时间都在编辑,而不是编写新代码。默认的文本编辑器模式应该针对编辑而非编写进行优化。在我看来,能够在不同模式之间切换是一项必不可少的功能。

感谢您读到这里。希望您对 Vim 以及它为何如此受欢迎有了更深入的了解。归根结底,Vim 只是一种工具。作为程序员,我们需要灵活运用各种工具,并选择最适合的工具来完成工作。

祝您编程愉快!

资源

文章来源:https://dev.to/iggredible/introduction-to-vim-modes-1cp2