[VSCodeVim] Vim的基本操作、模式与状态列

Vim的基本操作、模式与状态列


[系列文目录]

在使用Vim之前,让我们来认识一下Vim的模式(Mode)与各个模式之间的操作与转换。

  • 普通模式(Normal Mode):为Vim启动後的预设模式,在此模式中可以使用多种命令快速移动游标至对应位置。在使用Vim之前我们可能习惯使用方向键移动,现在在普通模式里,我们改为使用右侧主列上的hjkl
    四个键进行左、下、右、上的移动,并且使用y(yank )、d(delete )、c(change )等命令复制、删除、修改对应游标下的文字。
  • 插入模式(Insert Mode):在普通模式下输入i(insert)会进入插入模式。
    在此模式中可以输入文字、自由修改与编辑。
  • 可视模式(Visual Mode):在普通模式下输入v(visual)会选取游标下的该
    文字并进入可视模式。这个模式里可以选取并重点标示(Highlight)文字区
    域,突显选取的纯文字区域,之後我们可以使用对应命令(ydc)操作所
    有选中的文字。
  • 命令列模式(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)命令来修改下图的这段内容,看看会发生什麽事情?

change word
(图源:作者自制)

选中的文字会先被删除,并进入插入模式的状态,让我们可以马上输入要修改的文字。这是c命令的标准行为,若我们在普通模式使用相关的s(substitute)命令命令修改一个字,状态一样会直接进入插入模式。

好的,这里我们多认识了一个命令,并且了解不同命令跟状态转换之间的关联性。那麽删除功能的d命令呢?也许你开始好奇这些Vim命令的规则了,回到普通模式後,让我们按u(undo)先复原文字。

现在,再次重复刚才的选取操作,但我们改为输入d来删除选取文字区段。删除选中文字後,我们回到了普通模式。这也是合乎逻辑的行为,毕竟仅需删除动作的我们,无需再度进入插入模式。

After Delete a word
(图源:作者自制)

进入命令列模式

好的,现在让我们输入:,进入命令列模式吧!进入此模式後预设的游标样式如下图所示。

CommandLineModeUI
(图源:作者自制)

此时,不一样的是,在最底下的状态列中,我们不会看到--COMMAND LINE MODE-- 的字样,告诉我们已经进入对应模式。而是看到:与状态列上面的游标,如下所示:


(图源:作者自制)

现在,我们可以输入对应命令,假设我们要跳转到第二行,在Vim 里面我们可以输入:{n}来跳转到指定行数 (此处的n为指定跳转的行数),这里我们接着输入2


(图源:作者自制)

输入完整命令後,按下enter键即可执行对应命令,跳转到第二行。


(图源:作者自制)

本篇小结


好的,从前面文章中,我们认识了最基本的Vim 用法。Vim的设计是考量过盲打(TouchTyping)的,了解模式下的基本操作和键盘的姿势,会让我们的编辑器操作更得心应好,现在我们已经有足够的基础可以进阶了。

透过有方法跟顺序的练习,我们会逐步认识到一个新的编辑器的世界。


<<:  [VSCodeVim] Touch Typing 建立良好的键盘操作习惯

>>:  学习日记-1

[Day 13] tinyML开发框架(一):TensorFlow Lite Micro初体验(下)

执行推论(C/C++ + Arduino IDE + MCU) 书接上回[Day 12] tinyM...

第十七天:该用 implementation 还是 compile?

在定义 Gradle Build Script 里的 dependencies 时,您是不是也曾跟笔...

[Day23]-用python处理影像档案2

在影像内绘制图案 绘制点、线条 绘制多边形 *在影像内填入文字 小实作-制作Qrcode ...

Navicat Premium 15 永久激活

Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单...

Day2 介绍网页的基础架构

要开始写网页之前,首先要了解到网页是如何形成的,其实网页形成非常的简单,透过网页浏览器(google...