本文链接: https://blog.csdn.net/xietansheng/article/details/85041723
1. 安装 Vim
Vim 是一个在 Vi 基础上改进,并增加了许多特性,功能更强大,跨平台的终端文本编辑器。Vim 和其他 PC 文本编辑器一样,支持文件打开/保存、复制、粘贴、删除、查找、替换等操作。
Linux 系统下安装 Vim:
# Debian 系列: Debian、Ubuntu 等
sudo apt-get install vim
# RedHat 系列: Redhat、CentOS、Fedora 等
sudo yum install vim
MAC 系统一般默认已安装,其他平台可以去官网下载安装:
- Vim 官网: https://www.vim.org
- Vim 源码: https://github.com/vim/vim
安装完成后,启动 vim:
# 打开一个空白文档, 保存时需要指定保存位置
vim
# 打开指定文件
vim <file>
# 左右分屏打开多个文件, n 表示分屏的数量
vim -on file1 file2 ...
# 上下分屏打开多个文件, n 表示分屏的数量
vim -On file1 file2 ...
2. Vim 的工作模式
Vim 常见的其中 4 种工作模式:
- 正常模式(Normal)
- 插入模式(Insert)
- 命令模式(Command)
- 可视模式(Visual)
模式之间的切换:
PS: 输如各种命令和快捷键操作, 需要将本地输入法切换为 英文状态。
2.1 正常模式(Normal)
启动 vim 后,默认处于 正常模式。处在其他模式时,按下 ESC键 返回到 正常模式(有些模式下需要按两次 ESC键 才能返回 正常模式)。正常模式 一般用于 浏览文件,也可以用于复制、粘贴、删除等操作。
正常模式
下浏览文件,有许多操作的快捷键。
(1) 光标(内容浏览)
h, j, k, l // 移动光标: 左、下、上、右(方向键也可以移动光标)
w // 光标 向前移动一个 words
b // 光标 向后移动一个 words
{ // 光标 向前移动一个 段落
} // 光标 向后移动一个 段落
M // 移动光标到 当前屏幕显示的 中间行 行首
L // 移动光标到 当前屏幕显示的 最后一行 行首
Ctrl+u/d // 向 上/下 翻半屏
Ctrl+b/f // 向 上/下 翻一屏
gg // 移动光标到第一行行首(文件开头)
<Num>G // 移动光标到指定的行(先按数字, 再按大写G),
// 不输入数字, 直接按 G 表示光标移动到 最后一行 行首
(2) 分屏操作
Ctrl+w s // 上下分屏 打开当前窗口的文件
Ctrl+w v // 左右分屏 打开当前窗口的文件
Ctrl+w c // 关闭当前窗口, 如果当前是最后一个窗口, 不能关闭
Ctrl+w q // 关闭当前窗口, 如果当前是最后一个窗口, 关闭后退出
Ctrl+w+w // 分屏窗口切换(按下Ctrl后不释放, 再连续按两次w)
Ctrl+w h/j/k/l // 分屏窗口切换(移动光标), 按下Ctrl+w释放后, 再按 h左、j下、k上、l右
Ctrl+w 方向键 // 分屏窗口切换(移动光标), 按下Ctrl+w释放后, 再按上下左右方向键移动窗口
Ctrl+w H/J/K/L // 分屏窗口移动, 按下Ctrl+w释放后, 再按 H左、J下、K上、L右
Ctrl+w + // 窗口加高, 窗口底边 往下移动(如果是做下边窗口, 则窗口顶边 往上移动)
Ctrl+w - // 窗口减高, 窗口高度 往上移动(如果是做下边窗口, 则窗口顶边 往下移动)
Ctrl+w > // 窗口加宽, 窗口右边 往右移动(如果是最右边窗口, 则窗口左边 往左移动)
Ctrl+w < // 窗口减宽, 窗口右边 往左移动(如果是最右边窗口, 则窗口左边 往右移动)
Ctrl+w = // 窗口等宽等高
Ctrl+w n > // 窗口加宽 n 个单位, n 为整数
Ctrl+w n < // 窗口减宽 n 个单位, n 为整数
(3) 复制 / 粘贴
// 复制 一般要和 可视模式 一起使用
y // 复制(可视模式下执行, 复制可视模式下选中的区块)
d // 剪切(可视模式下执行, 剪切可视模式下选中的区块)
p // 粘贴(在光标处粘贴剪贴板的内容)
yy // 复制光标所在的当前行
(4) 查找 / 替换
/<keywork> // 查找内容, 例如: /abc<Enter> 查找 "abc" 字符串(支持正则表达式)
/<keywork>\c // 忽略大小写查找内容
/<keywork>\C // 区分大小写查找内容
N // 查找内容匹配的 上一个
n // 查找内容匹配的 下一个
r<char> // 替换当前光标处的字符(输入r, 再输如一个用于替换的新字符)
R // 进入“替换模式”, 接着输入字符替换掉当前光标处的字符, 并且光标往后移动一个字符
// 全局替换 在 命令模式 中(看后面的 命令模式 介绍)
(5) 移动 / 删除
<< // 光标所在行左移
>> // 光标所在行右移
x // 删除光标后的一个字符, 相当于 Delete
X // 删除光标前的一个字符, 相当于 Backspace
dd // 删除光标所在行
<Num>dd // 从光标所在行开始删除 Num 行(先按数字, 再按dd)
D // 删除光标所在行 的 光标后 的 所有内容(包括光标所在字符)
d0 // 删除光标所在行 的 光标前 的 所有内容(不包括光标所在字符)
dw // 删除光标开始位置的一个 words
(6) 重复 / 撤销
. // 重复上一次操作的命令
u // 撤销
Ctrl+r // 反撤销
2.2 可视模式(Visual)
可视模式
通常用于批量选中文本区块,然后批量操作(复制、剪贴)。
在 正常模式 或 可视模式 下,按下:
v键
,进入 可视模式,左下角显示 “– VISUAL –”
// 进入 可视模式 模式后
方向上/下键 // 从光标所在位置开始, 向 上/下 (反)选中 一行
方向左/右键 // 在光标所在行内, 向 左/右 (反)选中 一个字符
V键
,进入 可视行模式,左下角显示 “– VISUAL LINE –”
// 进入 可视行模式 模式后
方向上/下键 // 从光标所在位置开始, 向 上/下 (反)选中 一行
Ctrl+v键
,进入 可视块模式,左下角显示 “– VISUAL BLOCK –”
// 进入 可视块模式 模式后
方向上/下键 // 从光标所在位置开始, 向 上/下 (反)选中 一行(多选, 每行内的选中位置和其他行一致)
方向左/右键 // 在所选的 所有行内, 向 左/右 (反)选中 所有行内的一个字符
2.3 插入模式(Insert)
在 正常模式 下,通常按下 i键 进入到 插入模式,即可开始编辑文档。
处于 插入模式 时,左下角显示 “– INSERT –”。
正常模式
进入到插入模式
的快捷键对应的进入后光标的位置:
i // 正常进入插入模式
I // 移动光标到 行首
a // 移动光标到 下一个字符
A // 移动光标到 行尾
o // 向下 新开一行, 并移动光标到 新行首
O // 向上 新开一行, 并移动光标到 新行首
2.4 命令模式(Command)
在 正常模式 下,按下 :键 进入到 命令模式,等待输如命令,输入命令后按 Enter键 执行命令。
命令模式 下的常用命令:
:help [keywork] // 查看帮助信息, 也可以直接按 F1键 查看帮助信息
:help <KEY> // 查看指定快捷键的含义, 例如: ":help i"
:q // 退出
:q! // 强制退出(不保存)
:qa // 退出所有窗口
:qa! // 强制退出所有窗口(不保存)
:w // 保存
:wq // 保存并退出
:w <newfile> // 保存, 如果 vim 没有指定打开的文件, 需要输入保存的文件名
:wq <newfile> // 保存并退出, 如果 vim 没有指定打开的文件, 需要输入保存的文件名
:wq! <newfile> // 强制退出,并另存当前内容到指定文件
:o <file> // 在当前窗口 打开指定文件
:sp <file> // 上下分屏 打开指定文件
:vsp <file> // 左右分屏 打开指定文件
命令模式 下的 全局替换 命令,:s
(substitute)命令:
命令格式:
:<作用范围>s/<旧字符串>/<新字符串>/<替换标志>
作用范围:
s // 当前行
%s // 全文
'<,'>s // 可视模式下选中的区域, 可是模式下输入:将自动补齐:'<,'>
2,5s // 第 2 ~ 5 行(共 4 行)
.,+2s // 当前行 和 下面 2 行(共 3 行), 点表示当前行
替换标志:
g // 全局替换(整个作用范围内, 不包括作用范围外)
i // 忽略大小写
I // 区分大小写(默认)
c // 替换时需要确认: replace with xxx (y/n/a/q/l/^E/^Y)
// y 替换, n 不替换, a 替换所有,
// q 退出查找模式, l 替换当前位置并退出
命令实例:
:s/abc/123/g // 当前行的所有 "abc" 替换为 "123"
:%s/abc/123/g // 把全文所有的 "abc" 替换为 "123"
:%s/abc/123/gi // 把全文所有的 "abc" 替换为 "123", 并且不区分大小写
:'<,'>s/abc/123/g // 把可视模式下选中的文本中的 所有 "abc" 替换为 "123"
:.,+2s/abc/123/g // 把当前行和下面2行的所有 "abc" 替换为 "123"
:2,5s/abc/123/g // 把第 2 ~ 5 行的所有 "abc" 替换为 "123"