# 基础知识

houdunren.com (opens new window) @ 向军大叔

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 保存修改并退出

# 可视化模式

在普通模式下按 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 从上次编辑位置移动到本次编辑位置,可以跨文件操作

# 剪切操作

按键 说明
x 删除当前光标所在处的字符
X 删除当前光标左边的字符
d$ 删除从光标到一行末尾的整个文本
d0 删除从光标到一行开头的所有单词
dd 删除当前光标处的一整行
5dd 删除从光标开始处的5行代码
dgg 删除从光标到文本开头
dG 删除从光标到文本结尾
di" 删除在引号之间的内容
dit 删除HTML标签内容
dtx 向后删除字符直到遇到第一个 x 字符
dw 删除到下一个单词的词首
dW 删除到右边界
daw 删除到左或边界,适合删除HTML属性
diw 删除光标所在单词
daw 删除光标所在单词,包括空格
dit 删除html标签内容
dat 删除html标签
D 删除到行尾
C 删除到行尾,进入插入模式
c^ 删除到行首
c$ 删除到行尾
ciw 删除单词并进行修改
caw 删除单词和空格并进行修改

# 复制粘贴

按键 说明
y 复制
p
yy 复制一整行
2yy 复制从当前光标所在行开始的2行
yit 复制标签内容
yat 复制完整标签
yG 复制到最后
y{ 复制到段落开始
y} 复制到段落结尾
yiw 复制单词并移到词首
yaw 复制单词并移到上个单词尾部
yit 复制html标签内容
yat 复制html标签

# 修改替换

按键 说明
cw 删除从光标处到单词结尾的文本并进入到插入模式
cb 删除从光标处到单词开头的文本并进入到插入模式
cc 删除一整行并进入到插入模式
r 替换当前光标下的字符
R 进入到替换模式
ctx 向后修改内容到 x,也就是意味着删除光标到 x 中间内容,并进入插入模式
ci" 改写双引号中的内容
cc 编辑当前行
c^ 删除到行首,并进入编辑模式
c$ 删除到行尾,并进入编辑模式

# 注释操作

按键 说明
gcc 注释
gc2j 注释两行

# 环绕字符

按键 说明
cs"' "test" 光标在双引号内,将"替换为''
ds" 删除"环绕

# 查找替换

按键 说明
:/string 正向查找
:?string 反向查找
fx 向后查找x字符,按 ; 继续查找
Fx 向前查找x字符,按 ; 继续查找
:%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行(命令模式)
{ 到段首
} 到段尾

# 撤销重做

如果使用 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 模式
  • 为前缀键,`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](https://github.com/houdunwang/nvim)进行快速安装。