Skip to content

01|基础交互:界面、模式、保存与撤销

这一章只有一个目标:让你在 Neovim 里随时知道自己处于什么状态,下一次按键会发生什么,以及怎样安全退出。

整套教程都会围绕同一个小项目 pocket-tasks 逐章展开。后面的章节会继续使用前面的练习成果,因此请保留项目文件。

本章结束时,你会掌握

  • 看懂屏幕上几个常驻区域;
  • 在普通模式和插入模式之间切换;
  • F1 命令面板保存,无需输入冒号命令;
  • 撤销、重做,并确认文件何时真的写进磁盘;
  • 读懂教程里的按键写法。

本章要记的新按键不多,只有 EscAuCtrl+rSpace。前面见过的 iF1,这里也会再练一遍。

1. 建立练习项目

如果你还停在第 00 章打开的 Neovim 里,先按 F1、输入 wqa,再连按两次 Enter 回到终端。然后运行:

bash
mkdir -p ~/playground/pocket-tasks
cd ~/playground/pocket-tasks
git init
nvim README.md

这时磁盘上可能还没有 README.md。Neovim 只是先建了一个同名 Buffer,等第一次保存以后,文件才会真正落到磁盘上。

尚未保存到磁盘的空 README Buffer
尚未保存到磁盘的空 README Buffer

教程里的按键记号

写法实际动作
Space e依次按空格、e,无需同时按
Ctrl+r按住 Ctrl,点一下 r
F1按键盘的 F1
Enter回车
Esc退出当前输入状态,回到普通模式

这里把空格设成了 Leader。文中出现 Space,就表示要从 Leader 开始输入自定义快捷键。

2. 认识界面区域

刚打开文件时,屏幕大致可以分成这些区域:

  1. 最左侧符号栏:用于显示 Git 改动和诊断标记。当前配置始终保留这一列,没有标记时为空。
  2. 行号栏:显示绝对行号。当前行及其行号会高亮,便于确认光标位置。
  3. 中央编辑区:文件正文。波浪线 ~ 表示文件内容已经结束,它们不属于文件。
  4. 顶部标签栏:存在多个 Tab 时显示。Tab 表示一套窗口布局;文件内容保存在 Buffer 中,后面会专门练习。
  5. 底部状态栏:Lualine 会显示模式、文件名、Git 分支、诊断、光标位置等信息。换到不同文件或环境时,没有内容的项目会自动省略。
  6. 最底部命令与消息行:搜索内容、插件提示和保存结果会暂时显示在这里。

状态栏里如果写着 NORMAL,键盘就是拿来发命令的;如果写着 INSERT,键盘就是拿来输入文字的。

3. 两个核心模式

同一个按键换到不同模式,作用也会跟着变。现在先记住两种:

普通模式 Normal

这是默认模式。字母键在这里代表移动、删除、复制等操作。文件刚打开时,通常就在普通模式。

插入模式 Insert

i 进入插入模式,接下来敲下的文字就会写进文件。按 Esc 可以回到普通模式。

可以把 Esc 当成“回普通模式”的通用键。只要不确定自己在哪儿,先按一下 Esc,再输入普通模式命令。

练习:写下第一份 README

确认底部显示普通模式,然后:

  1. i
  2. 输入下面的内容。换行就按 Enter
markdown
# Pocket Tasks

A tiny task tracker for terminal-loving humans.

## Goals

- Add tasks
- Complete tasks
- List open tasks
输入 README 正文时处于 INSERT 模式
输入 README 正文时处于 INSERT 模式
  1. 全部输入完后按 Esc

这时正文应该已经出现在编辑区,底部也回到了 NORMAL。不过内容可能还只在内存里,并没有保存。

按 Esc 后回到 NORMAL 且文件仍未保存
按 Esc 后回到 NORMAL 且文件仍未保存

小提示:插入时敲下 ([、引号等字符,mini.pairs 会自动补上另一半。直接在中间接着打字就行;再输入已经存在的右半边时,光标通常会直接越过去。

4. 从行尾继续写:A

普通模式下:

  • i:在光标位置之前开始插入;
  • A:跳到当前行末尾,并进入插入模式。

下面故意改错一次:

  1. 你现在应当停在最后一行附近。按 A
  2. 输入 !!!
  3. Esc

这时最后一行应该会变成 - List open tasks!!!

用 A 在行尾追加三个感叹号
用 A 在行尾追加三个感叹号

要在行尾补充逗号、注释或参数时,A 很方便,因为无需先将光标移动到行尾。

5. 撤销与重做

普通模式下:

  • u:撤销最近一次修改;
  • Ctrl+r:重做刚撤销的修改。

接着上面的 !!! 练习:

  1. u,三个感叹号消失。
按 u 撤销行尾追加
按 u 撤销行尾追加
  1. Ctrl+r,三个感叹号回来。
按 Ctrl-r 重做刚才的追加
按 Ctrl-r 重做刚才的追加
  1. 再按 u,把它们清掉,留下干净的 README。
再次撤销后恢复干净 README
再次撤销后恢复干净 README

最后一行现在应该重新变回了 - List open tasks

从进入插入模式到离开,通常会被算成一个撤销单元。也就是说,从按下 iA,到最后按 Esc,中间的修改往往按一次 u 就能全部撤销。如果想让撤销记录切得更细,可以每写一小段就回一次普通模式。

6. 用 F1 保存,不用输入冒号

默认情况下,Neovim 不会自动保存,也不会自动格式化。只有运行保存命令以后,内容才会写进磁盘。

只保存当前文件

  1. 确认已按 Esc 回普通模式。
  2. F1,打开 Snacks 命令选择器。
  3. 输入 write
在 F1 命令 Picker 中筛选 write
在 F1 命令 Picker 中筛选 write
  1. 按第一次 Enter 选中命令;底部命令行会出现自动填好的 :write
第一次回车后命令行出现 write
第一次回车后命令行出现 write
  1. 再按一次 Enter 执行。

完成后,命令面板会关闭,底部会出现类似 README.md written 的消息,磁盘上也终于有了 README.md

执行 write 后 README 首次写入磁盘
执行 write 后 README 首次写入磁盘

命令面板里的基本交互:

  • 直接打字:筛选命令;
  • Up / Down:移动高亮项;
  • 第一次 Enter:选中高亮命令并送到底部命令行;
  • 第二次 Enter:执行命令;
  • Esc:取消并关闭面板。

保存全部文件并退出

这个流程你已经走过一次了,这里再说清楚它到底做了什么:

  1. 普通模式按 F1
  2. 输入 wqa
在 F1 命令 Picker 中筛选 wqall
在 F1 命令 Picker 中筛选 wqall
  1. 连按两次 Enter:第一下选中,第二下执行。

wqa 会保存所有改过的 Buffer,然后退出全部窗口。

这一章后面还要继续练,所以现在只用 write 保存,先别退出。等最后检查完,再用 wqa 收尾。

7. 用 Space 查看功能入口

在普通模式按一下 Space,稍等片刻,Which-key 就会列出接下来能按哪些键。完整菜单不用背,先养成一个习惯:

README 中打开的 Leader Which-key
README 中打开的 Leader Which-key

想查找某个功能时,先按 Space 查看 Which-key 提示。

现在先看看,不用选任何功能。按 Esc 把菜单收起来。

后面很快会用到:

  • Space e:文件浏览器;
  • Space ,:已打开文件列表;
  • Space /:全项目文字搜索;
  • Space g s:Git 变更视图;
  • Space c f:格式化当前文件。

这些按键要依次输入。比如 Space c f,就是先后按空格、cf 三下。

8. 退出前检查

离开前逐项确认:

  • README 内容与示例一致;
  • !!! 已经清理;
  • 你能看出底部当前显示 NORMAL 还是 INSERT
  • 你明确知道当前配置不会自动保存。

现在依次按 EscF1 → 输入 wqaEnterEnter

回到终端后运行 ls,应该就能看到 README.md 了。

本章肌肉记忆

目标按键
开始输入i
从行尾追加A
回普通模式Esc
撤销u
重做Ctrl+r
打开命令面板F1
保存当前文件F1,输入 writeEnterEnter
保存全部并退出F1,输入 wqaEnterEnter
查看 Leader 提示Space,稍等

下一章:用 Snacks Explorer 搭项目骨架

本文档采用 知识共享 署名-相同方式共享 4.0 协议 进行许可。