Vim的基本操作、模式与状态列
[系列文目录]
在使用Vim之前,让我们来认识一下Vim的模式(Mode)与各个模式之间的操作与转换。
普通模式(Normal Mode):为Vim启动后的预设模式,在此模式中可以使用多种命令快速移动游标至对应位置。在使用Vim之前我们可能习惯使用方向键移动,现在在普通模式里,我们改为使用右侧主列上的h
、j
、k
、l
四个键进行左、下、右、上的移动,并且使用
y
(yank )、d
(delete )、c
(change )等命令複製、删除、修改对应游标下的文字。插入模式(Insert Mode):在普通模式下输入i
(insert)会进入插入模式。在此模式中可以输入文字、自由修改与编辑。可视模式(Visual Mode):在普通模式下输入
v
(visual)会选取游标下的该文字并进入可视模式。这个模式里可以选取并重点标示(Highlight)文字区
域,突显选取的纯文字区域,之后我们可以使用对应命令(
y
、d
、c
)操作所有选中的文字。命令列模式(Command Line Mode):在普通模式下,我们点击 : 键会进
入命令列模式,在此模式中输入一段文字,最后按下Enter,即可执行输入的
命令。
VSCodeVim支援的所有模式如文件连结
Vim的模式转换
Vim 里面的各个模式转换可以用状态机来思考,当我们在普通模式输入不同命令后,会进入对应的模式,再按下Esc
键可以退出所进入的模式,如下图所示。(VSCodeVim亦直接支援使用Ctrl/Cmd + c
快捷键来退出目前的模
式)
(图源:作者自製)
预设的普通模式
在VS Code 中,当我们安装Vim Extension 并进入Vim Mode 后,我们会先进入普通模式,在这个模式下,游标会变成块状。
(图源:Visual Studio Code实用指南)
同时,我们可以在最底下的状态列看到--NORMAL-- 的字样,确认我们已经进入普通模式,如下图所示。
(图源:作者自製)
进入插入模式
之后,我们输入i,进入插入模式,如下图所示。
(图源:Visual Studio Code实用指南)
完成输入或相关的编辑动作后,可以和前面一样点击Ctrl+c
(或是Esc
)退出可视模式。
不过,这样做通常没有什么意义,让我们直接输入c
(Change)命令来修改下图的这段内容,看看会发生什么事情?
(图源:作者自製)
选中的文字会先被删除,并进入插入模式的状态,让我们可以马上输入要修改的文字。这是c
命令的标準行为,若我们在普通模式使用相关的s
(substitute)命令命令修改一个字,状态一样会直接进入插入模式。
好的,这里我们多认识了一个命令,并且了解不同命令跟状态转换之间的关联性。那么删除功能的d
命令呢?也许你开始好奇这些Vim命令的规则了,回到普通模式后,让我们按u
(undo)先复原文字。
现在,再次重複刚才的选取操作,但我们改为输入d
来删除选取文字区段。删除选中文字后,我们回到了普通模式。这也是合乎逻辑的行为,毕竟仅需删除动作的我们,无需再度进入插入模式。
(图源:作者自製)
进入命令列模式
好的,现在让我们输入:
,进入命令列模式吧!进入此模式后预设的游标样式如下图所示。
(图源:作者自製)
此时,不一样的是,在最底下的状态列中,我们不会看到--COMMAND LINE MODE-- 的字样,告诉我们已经进入对应模式。而是看到:
与状态列上面的游标,如下所示:
(图源:作者自製)
现在,我们可以输入对应命令,假设我们要跳转到第二行,在Vim 里面我们可以输入:{n}
来跳转到指定行数 (此处的n为指定跳转的行数),这里我们接着输入2
。
(图源:作者自製)
输入完整命令后,按下enter键
即可执行对应命令,跳转到第二行。
(图源:作者自製)
本篇小结
好的,从前面文章中,我们认识了最基本的Vim 用法。Vim的设计是考量过盲打(TouchTyping)的,了解模式下的基本操作和键盘的姿势,会让我们的编辑器操作更得心应好,现在我们已经有足够的基础可以进阶了。
透过有方法跟顺序的练习,我们会逐步认识到一个新的编辑器的世界。