Skip to content

基础知识

向军大叔每晚八点在 抖音bilibli 直播

xj-small

Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

Neovim 是基于 vim 的速度更快的编辑器,也是 vim 的良好替代品。官网:https://neovim.io/

Neovim

运行模式

上 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的示例

  1. shift+v 进入可视模式
  2. : normal 表示在可视模式执行 normal 指令
  3. 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 h2houdunren.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 行替换hdhoudunren
:.,+2s/hd/houdunren/g从当前行到后两行替换hdhoudunren

快速跳转

按键说明
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可视块模式

下面使用行块模式批量添加内容

  1. 进行行块模式
  2. : 进入命令模式
  3. 之后敲的命令就是对每行的操作,比如敲入 : normal I houdunren- 表示在 normal 模式下首行前添加 houdunren- 字符

下面通过可视块批量在每行前添加字符 houdunren

  1. ctrl+v 进入可视块模式
  2. shift+G 选中到页面底部
  3. shift+i 进入编辑模式,输入houdunren
  4. 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进行快速安装。