# 基础知识

houdunren.com @ 向军大叔

xj-small

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

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

Neovim

# 安装软件

下面是介绍MAC和CENTOS安装,其他系统参数官网安装即可 https://github.com/neovim/neovim/wiki/Installing-Neovim

MAC

brew install neovim

在终端中执行以下命令启动 neovim

nvim 

CENTOS 8

  1. 先安装BREWCONDA 还有NODEJS

  2. 使用brew安装

    brew install neovim
    
  3. 安装PYTHON扩展

    conda install -c conda-forge neovim
    
  4. 注销并重新登录

  5. 运行软件

    nvim
    

PYTHON

安装一些插件需要让VIM支持PYTHON

pip3 install --user --upgrade neovim

# 配置文件

创建配置文件用于设置neovim配置

mkdir -vp ~/.config/nvim 
touch ~/.config/nvim/init.vim

# 运行模式

上vi/vim可以分为三种状态,分别是普通模式、插入模式和命令模式,各模式的功能区分如下:

# 普通模式

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段,以其它任何模式按esc 即可进宪普通模式

# 插入模式

只有在插入下,才可以做文字输入、删除,按「ESC」键可回到普通模式,下面是普通模式进入编辑模式的命令。

按键 描述 助记
i 在当前光标字符前插入 insert
a 在当前光标字符后插入 append
I 在当前行首插入 Insert
A 在当前行尾插入 Append
o 在下方开一新行,插入 open
O 在上方开一新行,插入 Open
r 替代字符,将当前字符替代为紧跟着输入的字符 replace
R 进入替代模式,将当前及之后的字符都替代为紧跟着输入的字符串,直到按 `` 返回 Normal 模式 Replace

# 命令模式

命令模式是在普通模式下按 : 进客户,用于搜索、保存退出等操作。

命令 说明
: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前

# 删除命令

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

# 复制粘贴

按键 说明
y 复制
p
yy 复制一整行
2yy 复制从当前光标所在行开始的2行
yit 复制标签内容
yat 复制完整标签
yG 复制到最后
y{ 复制到段落开始
y} 复制到段落结尾

# 修改替换

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

# 注释操作

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

# 环绕字符

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

# 查找替换

按键 说明
:/string 正向查找
:?string 反向查找
fx 向后查找x字符,按 ; 继续查找
Fx 向前查找x字符,按 ; 继续查找

# 快速跳转

按键 说明
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 垂直布局到水平布局

# 键盘映射

可以对按键布局进行自定义设置,在 ~/.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>