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?
如果您想了解更多信息,请查看以下资源:
:h motions- VIM 超快速导航
- 高效文本编辑的七个习惯
- 在 Vim 中移动
普通模式:语法
普通模式不仅用于导航,也用于编辑。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)。
了解更多信息:
:h change.txt- 如何在 Vim/Vi 中撤销和重做
- Vim 中的“点”命令接下来我们进入插入模式。
- Neil、Drew、实用活力
专业提示:时刻留意使用机会,.因为它功能强大,可以帮你节省大量击键次数。寻找可重复更改的选项。
插入模式:进入/退出插入模式的方法
我们来聊聊Vim的第二种模式:插入模式。在此模式下,你按下的任何键都会显示在屏幕上。
进入正常模式有多种方法。标准方法是使用i,但我个人使用以下 6 种方法:
i- 在光标前插入文本I- 在同一行的第一个非空字符之前插入文本a- 在光标后插入文本A- 在行尾插入文本o- 在光标下方另起一行,插入文本O- 在光标上方开始新的一行,插入
您还可以将gi文本插入到上次插入文本的位置。
退出插入模式的标准方法是使用 Esc 键。
如果你使用 Vim 编程一段时间后,你会开始觉得Esc按键距离太远。这是 Vi 的创建者 Bill Joy 使用的键盘:
注意按键布局。他的Esc按键大致位于现在 Tab 键的位置。我个人将其映射Esc到Caps。有些人喜欢使用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
可视化模式:基本用法
可视化模式的工作方式与大多数编辑器的高亮显示功能类似:
- 选中一段文字
- 执行操作。
有关可视化模式运算符的列表,请查看:h visual-operators。
常见的3种类型是:
- 改变 (
c) - 删除 (
d) - yank(
y)。
我认为以下三点也很有用:
- 去齿孔(
<) - 缩进(
>) - 命令行(
:)
我们来快速演示一下这段文本。我的光标位于行首"echo greetings"。
#! /bin/sh
echo greetings
echo vim
echo padawans
使用可视模式:
- 要删除所有内容
"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]
我想;在每个条目的末尾都添加一些内容。以下是使用可视化模式实现的方法:
C-v激活分块可视化模式2j向下$走到尽头A进入插入模式- 类型
; Esc退出可视化模式。
完成第 6 步后,你会看到它;已插入到所有三行中。
I您可以使用 eithe或.进行多行可视化模式的块级插入A。运算符(删除 ( d)、复制 ( y)、更改 ( c) 等)在这里也适用。
结论
Vim 是一款模态编辑器。如今大多数文本编辑器都是非模态编辑器。作为程序员,我们大部分时间都在编辑,而不是编写新代码。默认的文本编辑器模式应该针对编辑而非编写进行优化。在我看来,能够在不同模式之间切换是一项必不可少的功能。
感谢您读到这里。希望您对 Vim 以及它为何如此受欢迎有了更深入的了解。归根结底,Vim 只是一种工具。作为程序员,我们需要灵活运用各种工具,并选择最适合的工具来完成工作。
祝您编程愉快!
资源
:help:h vim-modes-intro:h visual-operators:h change.txt:h motions:h registers- 伊利奇·乔维卡,《快速掌握 Vim》
- Neil、Drew、实用活力
- 非模态编辑器与模态编辑器
- 高效文本编辑的七个习惯
- VIM 超快速导航
- 在 Vim 中移动
- 学习 Vim 语言——动词、名词和修饰语!
- Grokking Vi
- Vim 作为一种语言
- 掌握 Vim 语法
- 如何在 Vim/Vi 中撤销和重做
- Vim 中的“点”命令
- Vim寄存器
- Vim 高级寄存器
- 如何在Vim的插入模式下快速删除单词
- 插入模式下删除行
- 掌握 vim 语言
- 视觉模式真的是一种气味吗?(讨论)
