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 hd.ts | 打开 hd.ts 文件 |
:e src/**/index.ts | 打开 src 子目录下的 index.ts,按 tab 键有文件列表提示 |
可视化模式
在普通模式下按 v 进入可视模式
指令 | 说明 |
---|---|
v | 字符可视化模式,文本选择是以字符为单位 |
V | 行可视化模式,文本选择是以行为单位 |
ctrl-V | 块可视化模式,可以选择一个矩形内的文本 |
下面是指定在行首添加 houdunren.com
的示例
- shift+v 进入可视模式
- : normal 表示在可视模式执行 normal 指令
- Ihoudunren.com 表示在行首插入 houdunren.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' | houdunren.com | 'houdunren.com' |
添加标签 ysiwt h2 | houdunren.com | houdunren.com |
整行加引号 yss" | houdunren.com 后盾人 | "houdunren.com 后盾人" |
替换为单引号 cs"' | "houdunren" | 'houdunren.com' |
整行替换 cS'" | 'houdunren' | "houdunren" |
替换引号为标签 cs"t h2 | 'houdunren' | houdunren |
删除绰号 ds' | 'ds' | ds |
删除标签 dst | houdunren | Houdunren |
查找替换
按键 | 说明 |
---|---|
:/string | 正向查找 |
:?string | 反向查找 |
fx | 向后查找 x 字符,按 ; 继续查找 |
Fx | 向前查找 x 字符,按 ; 继续查找 |
fa | 向右查找 a |
Fa | 向左查找 a |
2fa | 向右查找第 2 个 a |
2Fa | 向左查找第 2 个 a |
:%s/hd/houdunren/g | 全局搜索hd 替换为houdunren |
:5,12s/hd/houdunren/g | 从第 5 行到 12 行替换hd 为houdunren |
:.,+2s/hd/houdunren/g | 从当前行到后两行替换hd 为houdunren |
快速跳转
按键 | 说明 |
---|---|
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 houdunren-
表示在 normal 模式下首行前添加houdunren-
字符
下面通过可视块批量在每行前添加字符 houdunren
- ctrl+v 进入可视块模式
- shift+G 选中到页面底部
- shift+i 进入编辑模式,输入
houdunren
- esc 所以可视块区域前添加了字符
houdunren
拼写检查
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进行快速安装。