跳转到内容
新建笔记

Vim 与 Neovim:编辑、窗口、寄存器与配置

普通模式把按键解释为命令;插入模式输入文字;可视模式选择范围;冒号进入 Ex 命令行。下表中的 Ctrl-X 表示按住 Ctrl 再按 X;连续写出的 gg、diw 则按顺序输入。

文件是磁盘上的数据,缓冲区是编辑中的文本,窗口是缓冲区的一种视图,标签页包含窗口布局。同一个缓冲区可以同时出现在多个窗口里。

目标常用操作
进入插入i 光标前,a 光标后,I 首个非空白前,A 行尾
新起一行o 下方,O 上方,然后进入插入模式
返回普通模式Esc
选择v 按字符,V 按行,Ctrl-V 按矩形块
查看内置帮助:help,或 :help 命令/选项

2. 位置、范围与操作符

跳转到“2. 位置、范围与操作符”

可以把很多编辑动作理解为 次数 + 操作符 + 移动/文本对象。例如 d 是删除操作符,w 是到下一个词的移动,iw 是词内部文本对象:dw 与 diw 的范围不一定相同。

类别命令含义
单字符移动h j k l左、下、上、右
行内位置0、^、$行首、首个非空白、行尾
文件位置gg、G、42G首行、末行、第 42 行
屏幕滚动Ctrl-U/D、Ctrl-B/F半屏上/下、整屏上/下
字符删除x、X、3x光标处、光标前、从光标处起 3 个字符
行删除dd、3dd当前行、从当前行起 3 行
范围删除d$、d0、diw到行尾、到行首、词内部
范围复制yy、y$、yiw当前行、到行尾、当前词内部
粘贴p、P字符型在光标后/前,行型在当前行下/上
改写cw、ciw、cc改写相应范围并进入插入模式

dn 不是“删除 n 个字符”的模板:其中小写 n 是搜索移动命令。次数应使用实际数字,如 3x、3dd。命令行 :10,20delete 删除第 10~20 行。编辑命令

3. 撤销文本与恢复文件

跳转到“3. 撤销文本与恢复文件”

普通模式 u 撤销编辑,Ctrl-R 重做;它们作用于缓冲区的撤销历史。误删的文本若仍在撤销历史中可恢复,但磁盘文件被文件管理器或插件删除后,不能保证按 u 能找回文件,应查回收站、版本控制或备份。

:earlier 5m 可在现有撤销历史中回到约 5 分钟前;先检查内容再保存。跨会话撤销依赖持久撤销配置和对应文件,不等于完整备份。撤销与历史

操作示例
向前/向后搜索/pattern、?pattern
重复搜索n 按原方向,N 反方向
全文件替换并逐项确认:%s/old/new/gc
仅选定行替换:10,20s/old/new/g
当前行缩进/反缩进>>、<<
按当前缩进规则整理一行==
按当前规则整理整个缓冲区gg=G
整理花括号内部/含括号范围=i{、=a{

替换中的搜索部分是模式,不总是普通字符串;g 处理一行里的全部匹配,c 逐项确认。自动缩进结果取决于文件类型、缩进表达式和配置;它不是通用语法检查或代码修复器。

5. 保存、窗口和缓冲区

跳转到“5. 保存、窗口和缓冲区”
命令实际作用
:w保存当前缓冲区
:q退出当前窗口;最后窗口退出编辑器,未保存修改可能阻止退出
:close关闭当前窗口,不能关闭最后一个普通窗口
:split / :vsplit水平/垂直分屏
Ctrl-W h/j/k/l到左/下/上/右窗口
Ctrl-W w在窗口间切换
:only保留当前窗口,关闭其他窗口,未保存修改可能阻止操作
:tabnew新建标签页
:buffers / :ls查看缓冲区列表
:buffer 3切换到编号为 3 的缓冲区
:bdelete从列表移除并卸载缓冲区;不会删除磁盘文件
:edit path打开文件
:read path把文件内容插入当前缓冲区
:cd path / :pwd改变/查看当前工作目录

普通模式 q 用于宏录制,不是退出窗口;qa 开始把按键录入寄存器 a,之后按 q 停止,@a 执行,@@ 重复最近宏。退出是带冒号的 :q。窗口与缓冲区

6. 寄存器与系统剪贴板

跳转到“6. 寄存器与系统剪贴板”
操作示例
复制当前行到寄存器 a"ayy
从寄存器 a 粘贴"ap
复制当前行到系统剪贴板"+yy
从系统剪贴板粘贴"+p
查看寄存器内容:registers

+、* 的行为依赖平台和剪贴板提供程序,终端鼠标选择也受终端设置影响。不能把 :let @a = "+" 当成粘贴命令:那只是把一个加号字符串写入寄存器 a。无法使用系统剪贴板时,先查看 :help clipboard;Neovim 可运行 :checkhealth 检查提供程序。

7. 编码、字体与可修改性

跳转到“7. 编码、字体与可修改性”

文件编码、编辑器内部编码、终端编码是不同层。先查 :setlocal fileencoding?、:set encoding?;读取错误编码时可按已知源编码重新打开,如 :edit ++enc=gb18030 文件名,会涉及当前缓冲区未保存内容,先处理修改。另存为 UTF-8 可明确设置 :setlocal fileencoding=utf-8 后保存。

Neovim 内部使用 UTF-8,不照搬旧 Vim 的 termencoding 设置。字体由终端或 GUI 前端控制,guifont 也依赖具体前端支持。

modifiable 控制当前缓冲区能否修改;readonly 控制普通写文件操作,二者不等同。使用 :setlocal modifiable? 查看状态,必要时对普通文本缓冲区设置 :setlocal modifiable。插件的树、预览、帮助等缓冲区禁止修改通常有其原因,不要统一强制解锁。:setglobal 不会追溯修改所有已有缓冲区的局部值。选项说明

8. 配置路径与映射来源

跳转到“8. 配置路径与映射来源”

Vim 用 :version 查看启动文件搜索位置;Neovim 用 :echo stdpath('config') 查看配置目录。nvim -u 路径 可显式使用指定配置,不需要把他人的绝对路径写死到启动脚本中。

:verbose nmap <leader>ff
:verbose imap <C-Space>
:verbose setlocal shiftwidth?

这些命令用于核查映射或选项的实际定义位置。ff、fg、fb、fh 是某些配置的简写,不是 Vim 内置命令;先核对 leader 和插件是否安装,再参考 Neovim 配置键位表。映射说明

插件作用核查入口
vim-plug插件安装、更新与清理:PlugStatus,配置中的 plug#begin() / Plug / plug#end()
Telescope文件、文本、缓冲区等选择器:Telescope find_files、:Telescope live_grep,以及插件帮助
nvim-tree文件树视图进入树缓冲区,用 g? 查看当前帮助

vim-plug 的 :PlugInstall 安装配置中的插件,:PlugUpdate 更新,:PlugDiff 看更新差异,:PlugClean 清理配置中已移除的插件,:PlugUpgrade 更新管理器自身。插件命令仅在相应管理器已经加载时存在。

Telescope 和 nvim-tree 的键位可被配置覆盖。旧稿混合了动作名、按键及不同版本的含义;详细历史配置统一放入上面的键位表,不再在基础命令页复制第二份。相关文档:vim-plug、Telescope、nvim-tree。