Appearance
基础知识
Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
Neovim 是基于 vim 的速度更快的编辑器,也是 vim 的良好替代品。官网:https://neovim.io/

运行模式
上 vi/vim 可以分为三种状态,分别是普通模式、插入模式和命令模式,各模式的功能区分如下:
普通模式
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段,以其它任何模式按esc 即可进宪普通模式
| 按键 | 描述 | 助记 |
|---|---|---|
i | 在当前光标字符前插入 | insert |
a | 在当前光标字符后插入 | append |
I | 在当前行首插入 | Insert |
A | 在当前行尾插入 | Append |
o | 在下方开一新行,插入 | open |
O | 在上方开一新行,插入 | Open |
r | 替代字符,将当前字符替代为紧跟着输入的字符 | replace |
R | 进入替代模式,将当前及之后的字符都替代为紧跟着输入的字符串,直到按 `` 返回 Normal 模式 | Replace |
| gj | 移动到屏幕折行后的下行 | |
| gk | 移动到屏幕折行后的上行 |
命令模式
命令模式是在普通模式下按 : 进客户,用于搜索、保存退出等操作。
| 命令 | 说明 |
|---|---|
| :w | 保存保存 |
| :w file | 另存为文件 |
| :q | 退出 |
| :q! | 放弃修改退出 |
| :wq | 保存修改并退出 |
| :e bm.ts | 打开 bm.ts 文件 |
| :e src/**/index.ts | 打开 src 子目录下的 index.ts,按 tab 键有文件列表提示 |
可视化模式
在普通模式下按 v 进入可视模式
| 指令 | 说明 |
|---|---|
| v | 字符可视化模式,文本选择是以字符为单位 |
| V | 行可视化模式,文本选择是以行为单位 |
| ctrl-V | 块可视化模式,可以选择一个矩形内的文本 |
下面是指定在行首添加 banmashou.com的示例
- shift+v 进入可视模式
- : normal 表示在可视模式执行 normal 指令
- Ibanmashou.com 表示在行首插入 banmashou.com
常用命令
移动命令
Vim 的各种移动命令主要是在标准模式下
| 按键 | 描述 |
|---|---|
h | 光标左移 |
j | 光标下移 |
k | 光标上移 |
l | 光标右移 |
0 | 跳到行首,可以理解为无穷大的h |
^ | 跳到行首开始的第一个非空白字符 |
$ | 跳到行尾,可以理解为无穷大的l |
gg | 跳到首行,可以理解为无穷大的k |
G | 跳到末行,可以理解为无穷大的j |
w | 跳到下一个词首 |
ge | 跳到上一个词尾 |
b | 跳到单词开头 |
e | 跳到单词尾部 |
| 5k | 向上移动 5 行 |
| 5j | 向下移动 5 行 |
| 5w | 向后移动 5 个词 |
| fx | 向前移动到字符 x 上 |
| Fx | 向后移动到字符 x 上 |
| tx | 移动到字符 x 前 |
| Tx | 向后移动到字符 x 前 |
| zz | 当前行设为页面中心 |
| ctrl+o | 移动到上次编辑位置,可以跨文件操作 |
| ctrl+i | 从上次编辑位置移动到本次编辑位置,可以跨文件操作 |
制表符
| 按键 | 说明 |
|---|---|
| :6,16> | 6 行到 16 行向右缩进 |
| :6,16< | 6 行到 16 行向左缩进 |
选择
| 按键 | 说明 |
|---|---|
| vt] | 选择到],不包含],也适用于)、} |
| va] | 选择到], 包含 ],也适用于)、} |
剪切操作
| 按键 | 说明 |
|---|---|
| x | 删除当前光标所在处的字符 |
| X | 删除当前光标左边的字符 |
| d$ | 删除从光标到一行末尾的整个文本 |
| d0 | 删除从光标到一行开头的所有单词 |
| dd | 删除当前光标处的一整行 |
| 5dd | 删除从光标开始处的 5 行代码 |
| dgg | 删除从光标到文本开头 |
| dG | 删除从光标到文本结尾 |
| di" | 删除在引号之间的内容 |
| dit | 删除 HTML 标签内容 |
| dtx | 向后删除字符直到遇到第一个 x 字符 |
| dw | 删除到下一个单词的词首 |
| dW | 删除到右边界 |
| daw | 删除到左或边界,适合删除 HTML 属性 |
| diw | 删除光标所在单词 |
| daw | 删除光标所在单词,包括空格 |
| dit | 删除 html 标签内容 |
| dat | 删除 html 标签 |
| vat | 选择html标签 |
| D | 删除到行尾 |
| C | 删除到行尾,进入插入模式 |
| c^ | 删除到行首 |
| c$ | 删除到行尾 |
| ciw | 删除单词并进行修改 |
| caw | 删除单词和空格并进行修改 |
复制粘贴
| 按键 | 说明 |
|---|---|
| y | 复制 |
| p | 贴 |
| yy | 复制一整行 |
| 2yy | 复制从当前光标所在行开始的 2 行 |
| yit | 复制标签内容 |
| yat | 复制完整标签 |
| yG | 复制到最后 |
| y{ | 复制到段落开始 |
| y} | 复制到段落结尾 |
| yiw | 复制单词并移到词首 |
| yaw | 复制单词并移到上个单词尾部 |
| yit | 复制 html 标签内容 |
| yat | 复制 html 标签 |
| yi{ | 复制{内的内容,不包含{,也适用于(、} |
| ya{ | 复制{内的内容,包含{,也适用于(、} |
删除修改
| 按键 | 说明 |
|---|---|
| cw | 删除从光标处到单词结尾的文本并进入到插入模式 |
| cb | 删除从光标处到单词开头的文本并进入到插入模式 |
| cc | 删除一整行并进入到插入模式 |
| r | 替换当前光标下的字符 |
| R | 进入到替换模式 |
| ctx | 向后修改内容到 x,也就是意味着删除光标到 x 中间内容,并进入插入模式 |
| ci" | 改写双引号中的内容 |
| cc | 编辑当前行 |
| c^ | 删除到行首,并进入编辑模式 |
| c$ | 删除到行尾,并进入编辑模式 |
| cw | 删除到词结束并进入编辑 |
| ciw | 删除整个单词并进入编辑 |
| caw | 删除整个单词并进入编辑,包含左右空格边界 |
| d2t) | 删除到第 2 个扩号 |
| shft+d | 删除到行尾 |
| d+^ | 删除到行首 |
| d+$ | 删除到行尾 |
| c+^ | 删除到行首,并进入编辑 |
| c+$ | 删除到行尾,并进入编辑 |
| di} | 删除花扩号内容,不包含},也适用于)、] |
| da} | 删除花扩号内容,包含},也适用于)、] |
| diw | 删除单词,不包含左右空格边界 |
| diw | 删除单词,包含左右空格边界 |
| d2i} | 删除 2 层}的内容 |
| dip | 删除连接段落 |
| cip | 删除连接段落,并进入编辑 |
| dit | 删除 HTML 标签内容 |
| cit | 删除 HTML 标签内容,并进入编辑模式 |
注释操作
| 按键 | 说明 |
|---|---|
| gcc | 注释 |
| gc2j | 注释两行 |
环绕字符
| 按键 | 原内容 | 结果 |
|---|---|---|
| 单词加引号 ysiw' | banmashou.com | 'banmashou.com' |
| 添加标签 ysiwt h2 | banmashou.com | banmashou.com |
| 整行加引号 yss" | banmashou.com 斑马兽 | "banmashou.com 斑马兽" |
| 替换为单引号 cs"' | "banmashou" | 'banmashou.com' |
| 整行替换 cS'" | 'banmashou' | "banmashou" |
| 替换引号为标签 cs"t h2 | 'banmashou' | banmashou |
| 删除绰号 ds' | 'ds' | ds |
| 删除标签 dst | banmashou | Banmashou |
查找替换
| 按键 | 说明 |
|---|---|
| :/string | 正向查找 |
| :?string | 反向查找 |
| fx | 向后查找 x 字符,按 ; 继续查找 |
| Fx | 向前查找 x 字符,按 ; 继续查找 |
| fa | 向右查找 a |
| Fa | 向左查找 a |
| 2fa | 向右查找第 2 个 a |
| 2Fa | 向左查找第 2 个 a |
| :%s/bm/banmashou/g | 全局搜索bm替换为banmashou |
| :5,12s/bm/banmashou/g | 从第 5 行到 12 行替换bm为banmashou |
| :.,+2s/bm/banmashou/g | 从当前行到后两行替换bm为banmashou |
快速跳转
| 按键 | 说明 |
|---|---|
| gg | 跳转到第一行 |
| G | 跳转到最后一行 |
| 5G | 跳到第 5 行 |
| :5 | 跳转到第 5 行(命令模式) |
| { | 到段首 |
| } | 到段尾 |
| shift+* | 向下跳转到同名单词位置 |
| shift+# | 向上跳转到同名单词位置 |
| shift+n | 跳转到使用 shift+* 的下一个单词 |
| ctrl+d | 向下翻半页 |
| ctrl+u | 向上翻半页 |
| ctrl+f | 向下翻页 |
| ctrl+b | 向上翻页 |
| % | 跳转到匹配的块如 }、)、] |
撤销重做
如果使用 vscode 也可以直接使用 ctrl+z 等原来的方式操作
| 按键 | 说明 |
|---|---|
| u | 撤销上一步的操作 |
| ctrl+r | 将原来的插销重做一遍 |
窗口管理
| 命令 | 说明 |
|---|---|
| :vs 或 :vsplit | 左右分屏 |
| :sp 或 :split | 上下分屏 |
| :vertical resize 80 | 设置宽度 80% |
| :resize 80 | 设置高度 80% |
| ctrl+w c | 关闭当前窗口 |
| ctrl+w o | 关闭其他窗口 |
| ctrl+w l | 切换左边窗口 |
| ctrl+w j | 切换上边窗口 |
| ctrl+w k | 切换下面窗口 |
| ctrl+w l | 切换右面窗口 |
| ctrl+w w | 窗口间循环切换 |
| ctrl+w x | 窗口互换 |
| ctrl+w H | 从水平布局到垂直布局 |
| ctrl+w J | 从垂直布局到水平布局 |
文件操作
使用编辑器时我需要在最近文件间的切换操作,VIM 提供了相关的指令
| 命令 | 说明 |
|---|---|
| :w | 打开新文件 |
| :e | 编辑文件 |
| :ls | 查看缓冲区文件 |
| :bn | 编辑下一个文件 |
| :bp | 编辑上一个文件 |
| ctrl+6 | 最近被编辑的两个文件之间的切换 |
| :b1~n | 编辑开的文件, 1~n 是缓冲区文件列表的序号 |
| gf | 光标停留文件路径字符时,使用 gf 可以直接打开访文件 |
标签管理
| 命令 | 说明 |
|---|---|
| :tabe | 打开新标签 |
| :tabnext | 下一标签 |
| :+tabnext | 上一标签 |
修改配置文件来定义键盘映射会让操作变得方便
"============标签管理============
map tt :tabe<CR>
map tj :-tabnext<CR>
map tk :+tabnext<CR>缓冲区
| 命令 | 说明 |
|---|---|
| :ls | 查看缓冲区文件 |
| :bn | 编辑下一个文件 |
| :bp | 编辑上一个文件 |
块操作
使用块操作可以批量操作内容
| 命令 | 说明 |
|---|---|
| v | 普通块模式 |
| shift+v | 行块模式 |
| ctrl+v | 可视块模式 |
下面使用行块模式批量添加内容
进行行块模式
敲
:进入命令模式之后敲的命令就是对每行的操作,比如敲入
: normal I banmashou-表示在 normal 模式下首行前添加banmashou-字符
下面通过可视块批量在每行前添加字符 banmashou
- ctrl+v 进入可视块模式
- shift+G 选中到页面底部
- shift+i 进入编辑模式,输入
banmashou - esc 所以可视块区域前添加了字符
banmashou
拼写检查
nvim 内置了对错误单词的拼写检查,执行以下命令开关拼写检查
:set spell!标准模式下
移动到错误单词上按 z=将弹出建议的单词,然后敲单词前的数字键就可以完成替换
编辑模式
在编辑模式下按 ctrl+x s也会弹出单词建议
其他命令
| 命令 | 说明 |
|---|---|
| zc | 折叠代码块 |
| zo | 展开代码块 |
| zC | 折叠所有代码块 |
| zO | 展开所有代码块 |
键盘映射
可以对按键布局进行自定义设置,在 ~/.config/nvim/init.vim 文件中配置
- nmap 为 normal 模式
- imap 为 insert 模式
- <LEADER>为前缀键,
let mapleader=" "将LEADER定义为空格 - C 为 ctrl 键如
<C-b>指 ctrl+b
" ============ 键盘映射
let mapleader=" "
nmap ge :CocCommand explorer
nmap S :w <CR>
nmap Q :q <CR>
nmap <C-p> :FZF <CR>
nmap H <Home>
nmap L <End>
imap jj <Esc>
" ============ 分屏
nmap <LEADER>vh :vsplit<CR>
nmap <LEADER>vj :split<CR>
nmap <LEADER>w <C-w>
" ============ 文件树
nmap <C-b> ge <CR>屏幕分割
| 命令 | 说明 |
|---|---|
| split | 水平分屏 |
| vsplit | 垂直分屏 |
可以在配置文件中定义热键,来简化分屏操作操作
"分屏热键
nmap sl :set splitright<CR>:vsplit<CR>
nmap sh :set nosplitright<CR>:vsplit<CR>
nmap sk :set nosplitbelow<CR>:split<CR>
nmap sj :set splitbelow<CR>:split<CR>剪贴板共享
manjaro 系统剪贴板共享,需要安装以下命令
sudo pacman -S xsel然后在~/.config/nvim/init.vim配置文件中添加
set clipboard+=unnamedplus何俊配置
何俊已经将使用的 neovim 配置进行了开源,你可以访问github进行快速安装。
