vim 学习笔记
下列命令均在普通模式下进行
文档操作
操作后面跟 ! 为强制执行并抛弃当前未保存操作
:wq: 退出并保存
:q: 退出
:w: 保存
:e: 重新加载当前文档
:f: 或 ctrl + g 显示文档名,是否修改,和光标位置
- 新建文件 vim [fileName]
光标移动和配置自定义键位
- 光标移动
h: 左
j: 下
k:上
l:右
w: 移动到下个单词的首字母
b: 移动到上个单词的首字母
e: 移动到词尾
H: 移动到这个屏幕最上方第一个字符
M: 移动到屏幕中间行第一个字符
L: 移动到屏幕最下方第一个字符
nG: n 为数字,移动到当前文档第几行
gg: 移动到文件开头
G: 移动到文件结尾
n%: 移动到文件 n% 的位置
|: 移动到行首
0(数字0): 移动到行首
^(shift + 6): 移动到行首
$(shift + 4): 移动产行尾
-: 前一行首
+: 后一行首
%: 匹配括号
ctrl + f: 屏幕向下移动一页
ctrl + b: 屏幕向上移动一页
ctrl + d: 屏幕向下移动半页
ctrl + u: 屏幕向上移动半页
ctrl + e: 屏幕向下滚动一行
ctrl + y: 屏幕向上滚动一行
- 自定义键位
如果键位不习惯可以通过更改配置文件来实现自定义键位:
cd 进入家目录,新建一个文件夹 .vim
新建一个文件 vimrc
shell
cd ~
mkdir .vim
cd .vim
vim vimrc
文件内书写自己的 vim 配置文件
shell
# map 映射键位
# inoremap 普通模式下更改键位命令
# nnoremap 命令模式下更改键位命令,
nnoremap a b # 这句命令可以理解为把 a 键更改为 b 键,但是旧键并不会被删除
ps: 只使用 map 可能会产生递归问题
- 命令组合
js
- nore
表示非递归。
递归的映射。其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。
- n
表示在普通模式下生效
- v
表示在可视模式下生效
- i
表示在插入模式下生效
- c
表示在命令行模式下生效
搜索
/: 向后搜索
%: 向前搜索
n: 查找下一处
N: 查找上一处
:nohl: 退出搜索
合并下一行
J: 合并下一行
进入写入模式
i: 光标前插入
I: 首插入
a: 光标后插入
A: 尾插入
o: 在当前行下一行开启一行新行并进入写入模式
O: 当前行上一竺开启一行并进入写入模式
s: 删除后一个字符并进入写入模式
S: 除当前行内容并进入写入模式
c: 修改 删除并进入写入模式
C: 改至行尾并进入写入模式
r: 替换后一个字符
R: 入替换模式
## 复制和粘贴
y: 拷贝
Y: 拷贝一行
p: 在文字后粘贴
P: 在文字前粘贴
撤销和反撤销
u: 撤销上一步操作相当于 ctrl + z
ctrl + r 回退前一个命令,换句话说,它撤销一个撤销
缩进和反缩进
> : 缩进
<: 反缩进
=: 自动格式化 后面跟执行范围
可视模式命令
v: 进入可视模式
V: 进入行可视模式
ctrl + v 进入可视块模式
aw 选中一个单词(包含空格)
iw 选中一个单词
aW 选中一个字串(包含空格)
iW 选中一个字串
as 选中一个句子(包含空格)
is 选中一个句子
ap 选中一个段落(包含空格)
ip 选中一个段落
a( 选中一个()块(包含小括号)
i( 选中一个()块内容
a{ 选中一个{}块(包含大括号)
i{ 选中一个{}内容
a< 选中一个<>块(包含<>)
i< 选中一个<>块内容
a[ 选中一个[]块(包含[])
i[ 选中一个[]块内容
a" 选中一个双引号字符串内容(包含引号)
i" 选中一个双引号客串内容
a' 选中一个单引号字符串内容(包含引号)
i' 选中一个单引号客串内容
a` 选中一个反引号字符串(包含引号)
i` 选中一个反引号字符串内容
u 变成小写
U 变成大写
- 选中行执行命令
在可视模式下选中行,输入 normal 操作指令 系统会帮你执行这些操作
宏录制和使用
q 后面跟一个键位,表示宏要录制到哪个键位上,回车结束设置,然后跟宏要执行的命令,结束操作后 esc 再次点击 q 结束宏录制
@ 后面跟你设置的宏键位,就会执行
@ 前面可以设置执行次数,设置多少执行多少次
分割窗口
:Sex: 水平分割一个窗口,浏览文件系统
:Vex: 垂直分割一个窗口,浏览文件系统
:split: 上下分屏
:vsplit: 左右分屏