Skip to content

Neovim 基础

Neovim 模式简介

Neovim 有6个模式之多,Neovim 之所以有这么多模式,主要是继承了 Vim 的设计理念,而 Vim 又是从其前身 Vi 演变而来的。Vi 和 Vim 是为提高编辑效率而设计的文本编辑器,而 Neovim 则是对 Vim 的现代化重构。

Vi 和 Vim 的设计核心理念是高效文本编辑。在早期计算机资源有限、鼠标等图形用户界面尚不普及的环境下,开发者们需要一种只依赖键盘的高效编辑方式。通过多种模式的划分,可以减少频繁切换手指位置(比如从主键区到箭头键)的需求,极大地提高了编辑速度。

  • 普通模式 (Normal Mode): 默认模式,用于导航、复制、粘贴等操作。在其他模式按 Esc 可以进入普通模式。
  • 插入模式 (Insert Mode): 用于插入文本。按 i、a、o 等可以进入插入模式,按 Esc 退出插入模式。
  • 可视模式 (Visual Mode): 用于选择文本块。按 v 进入可视模式,V 进入行可视模式,Ctrl + v 进入块可视模式。
  • 命令行模式 (Command-Line Mode): 用于执行命令,如保存、退出、查找替换等。按 : 进入命令行模式。
  • 选择模式 (Select Mode): 用于选择文本(类似于可视模式),不过使用起来更像是传统编辑器中的选择行为,在块可视模式下按 gh 进入选择模式。
  • 替换模式 (Replace Mode): 类似插入模式,但会替换现有文本。按 R 进入替换模式。

其实不需要记住这么多模式,常用的模式只有命令行模式(执行一些命令)、插入模式(编辑文本)、可视模式(选择文本),其他模式了解即可。

常用快捷键

Neovim 中快捷键非常多,不同模式下快捷键的作用也不同,所以不建议强行记住所有快捷键,大概了解一下,记住常用快捷键就行,其他快捷键在使用过程中慢慢记忆即可。

普通模式(Normal Mode)

  • 导航

    • hjkl:向左、下、上、右移动光标。
    • w:移动到下一个单词的开头。
    • b:移动到前一个单词的开头。
    • 0:移动到行首。
    • $:移动到行尾。
    • gg:移动到文件开头。
    • G:移动到文件末尾。
  • 编辑

    • x:删除光标下的字符。
    • dw:删除光标后的一个单词。
    • dd:删除当前行。
    • d$:删除到行尾。
    • u:撤销上一个操作。
    • Ctrl + r:重做上一个撤销的操作。
  • 复制与粘贴

    • yyY:复制(yank)当前行。
    • yw:复制一个单词。
    • p:在光标后粘贴内容。
    • P:在光标前粘贴内容。
  • 查找

    • /text:向下查找 text
    • ?text:向上查找 text
    • n:跳转到下一个匹配项。
    • N:跳转到上一个匹配项。
  • 保存与退出

    • :w:保存当前文件。
    • :q:退出当前文件。
    • :wq:保存并退出。
    • :q!:强制退出不保存。

插入模式 (Insert Mode)

  • i:在光标前插入。
  • I:在行首插入。
  • a:在光标后插入。
  • A:在行尾插入。
  • o:在当前行下方新开一行并进入插入模式。
  • O:在当前行上方新开一行并进入插入模式。

可视模式 (Visual Mode)

  • v:进入字符可视模式。
  • V:进入行可视模式。
  • Ctrl + v:进入块可视模式。
  • y:复制选中的文本。
  • d:删除选中的文本。
  • ><:缩进或取消缩进选中的文本。

命令行模式 (Command-Line Mode)

  • :w:保存文件。
  • :q:退出文件。
  • :wq:保存并退出文件。
  • :q!:强制退出不保存。
  • :e filename:打开一个新的文件。
  • :s/old/new/g:替换当前行中的 oldnew
  • :%s/old/new/g:替换整个文件中的 oldnew

常见组合操作

  • 修改操作: c 表示改变。
    • cw:改变一个单词(删除并进入插入模式)。
    • cc:改变整行。
  • 重复操作:. 可以重复上一个操作。
  • 多行编辑: 进入块可视模式 (Ctrl + v) 后,选中多行,进行批量操作。

总结

以上只是 Neovim 的基本功能,作为一款文本编辑器,以上功能已完全能满足需求,但我们的目标并不止如此,当给 Neovim 配上插件,就像老虎添上了翅膀,可以从编辑器进化成 IDE!

博客内容遵循 CC BY-NC-SA 4.0 协议。