本文来自于 王利涛老师,linux 三剑客 相关课程vim初级部分的学习笔记,详情可查看淘宝店铺
vim 常见命令使用
1. vim 简介
c. vim 比 vi做的一些改进
vi : visual interface
EX的可视化接口
vim: vi improved
增加了多级撤销、多窗口操作。
稳定性提高、减少了崩溃以及崩溃后也可以恢复。
关键字自动补全自己上下文相关的补全。
2. vim 工作模式
普通模式 (命令模式)
vim a.c 时的默认模式
滚屏,移动光标,Ctrl + b ; CTRL + f;
插入模式
命令模式下 输入 i(o, a); esc 退出到普通模式
直接输入
命令行模式
shift + : , 输入命令 (基于 EX命令实现操作)
set number显示行号
vimrc /etc/vim/vimrc 配置文件默认执行
可视化模式
普通模式按 v键
然后移动光标就可以选中一块文本了
可以进行后续的粘贴、删除、复制等操作
替换模式
按R就可以进入到替换模式
从光标处开始替换内容 各种模式之间切换
某模式模式 - esc - 普通模式 - xx - 某模式
3. 光标移动
光标单个字符的移动:
h,i,j,k
单词移动:
w,b 前后一个单词的移动
e 将光标移动到下一个单词的词尾
E 移动到单词的结尾(忽略标点符号)
ge:将光标移动到上一个单词的词末
2w: 指定移动的次数
行移动:
$ 当前行为
0 (零)当前行首
^ 当前行的第一个非空字符(行首和当前行非空字符不是一个位置)
2| 移到当前行的第2列
fx:将光标移动到当前行的第一个字符x上
3fx: 将光标移动到当前行的第3个字符x上
tx: 将光标移动到目标字符x的前一个字符上
fx 和tx可以通过 ;和, 进行重复移动,一个是正向重复,一个是反向重复
% 用于符号间的移动,他会在一对()、[ ] 、{ } 之间跳跃
文本块移动:
( :移动当前句子的开头
) : 移下一个句子的开头
{: 移到当前一段的开头
} : 移到下一段的开头
[[ :移到当前一节的开头
]] : 移到下一节的开头
在屏幕中移动
XG: 跳转到指定的第x行,G移动到文件按末尾,` ` (2次单引号)返回到跳转前的位置
gg : 移动到文件开头
x%: 移动到文件中间,就是用50%
H: 移动到home
M: 移动到屏幕中间
L: 移动到一屏末尾
ctrl + G :查看当前的位置状态
4. 滚屏与跳转
半屏滚动:ctrl + u/ctrl + d
全屏滚动: ctrl + f/ctrl + b
定位光标的位置:
zz: 将光标置于屏幕的中间
zt: 将光标移动到屏幕的顶部
zb:将光标移动到屏幕的底部
设置跳转标记
mx , my , mz 设置三个位置
`x , `y, `z(` 在tab 键上面) 跳转到设置 (这个是在普通模式的情况下设置)
5. 文本插入操作
i:在当前光标的前面插入字符
a:在当前光标的后面插入字符
o: 在当前光标的下一行行首插入字符
I: 在一行的开头添加文本
A: 在一行的结尾处添加文本
O: 在光标当前行的上一行插入文本
s: 删除当前光标处的字符并进入到插入光标的模式
S: 删除光标所在处的行,并进入到插入模式
u: 撤销修改
6. 文本删除
字符删除
x: 删除当前光标所在处的字符
X: 删除当前光标左边的字符
单词删除
dw: 删除一个单词(光标处到空格)
daw: 无论光标在什么位置,删除光标所在的整个单词(包括空白字符)
diw: 删除整个单词文本,但是保留空格字符不删除
d2w:删除从当前光标开始处的2个单词。
d$:删除从光标到一行末尾的整个文本。
d0: 删除从光标到一行开头的所有单词
dl: 删除当前光标处的字符 = x
dh: 删除当前光标左边的字符 = X
行删除
dd: 删除当前光标处的一整行
5dd:删除从光标开始处的5行代码
dgg:删除从光标到文本开头
dG: 删除从光标到文本结尾
行合并:
J:删除一个分行符, 将当前行与下一行合并
7. 组合命令使用
y: 复制 ; p:粘贴
yw:复制一个单词
y2w:复制2个单词
y$:复制从当前光标到行结尾的所有单词
y0:复制从当前光标到行首的所有单词
yy: 复制一整行
2yy: 复制从当前光标所在行开始的2行
复制文本块
1. 首先进入 visual 模式(v:)
2. 移动光标选择文本
3. 复制与粘贴的操作(y,p)
剪切文本操作(删除再粘贴操作):
1. 首先进入 visual 模式(v:)
2. 移动光标选择文本
3. 复制、删除、粘贴的操作(y,d,p)
8. 文本修改与替换
cw: 删除从光标处到单词结尾的文本并进入到插入模式
cb: 删除从光标处到单词开头的文本并进入到插入模式
cc: 删除一整行并进入到插入模式
~: 修改光标下字符的大小写
r: 替换当前光标下的字符 (r + 字符 ,替换)
R: 进入到替换模式(replace)
xp:交换光标和下一个字符
9. 组合命令使用
光标命令和其他命令等可组合在一起
更改 删除 复制 从光标位置到…
cH dH yH 屏幕顶端
cL dL yL 屏幕低端
c+ d+ y+ 下一行
c5I d5| y5| 本行的第5列
2c) 2d) 2y) 往下第2个句子
c{ d{ y{ 上一段
cG dG yG 文件结尾
c13G d13G y13G 第13行
10. 文本查找与替换
10.1 查找 /xxxx 正向查找
操作:普通模式下,按: / + xxx + enter , n 向下查找,N向上查找
[ vim搜索及高亮取消](https://cloud.tencent.com/developer/article/2157419), 输入:nohlsearch 也可以:set nohlsearch; 当然,可以简写,noh或者set noh。
10.2 ?xxxx 反向查找
设置高亮显示
set hls 对查找对象高亮显示
* 按键 当前光标处的单词高亮显示,使用n浏览下一个查找高亮的结果
(补充,如何)
10.3 替换
:s/old/new 将当前行的第一个字符串old 替换为new
:s/old/new/g 将当前行的所有字符串old 替换为new
:90s/old/new/g 指定第90行的所有字符串old 替换为new
:90,93s/old/new/g 指定第90行 - 93行的所有字符串old 替换为new
:%s/old/new/g 将文本中所有字符串old 替换为new
:%s/old/new/gc 依次替换每个字符串关键字(每次替换都会弹出选项是否替换)
正则表达式
:%s/^struct/int/g 将所有以struct 开头的字符串替换为int
11. 修改保存于撤销
u: 撤销上一步操作。(一步一步操作)
ctrl + r : 将原来的撤销重做一遍
U: 恢复一整行原来的面貌( 也是相当于修改)
q:若文件没有修改,直接退出
q!: 文件已经被修改,放弃修改退出
wq: 文件已经被修改,保存修改并退出
e!: 放弃修改,重新回到文件打开时的状态
12. 编辑多个文件
文件和缓冲区的区别
文件是保存在磁盘上的,而打开的文件的文件是再内存中
在内存中有一个缓冲区,用来存放打开的文件。
vim每次打开文件时都会创建一个缓冲区,vim支持打开多个文件
:buffers 查看缓冲区列表 ==ls
:buffers N 根据缓冲区列表的编号跳转到指定缓冲区
:bnext/bprev 遍历缓冲区列表
:bfirst/blast 分别调到
:write 将缓冲区的修改保存到磁盘上
:edit! e! 放弃缓冲区的修改,恢复到
切换文件时,要放弃修改或者保存修改,恢复到磁盘里,不然的话,切换到另一个缓冲区
:edit file (file不一定在缓冲区列表,可以新创建一个文件缓冲区)编辑另一个文件
:wnext 保存当前 缓冲区的修改并跳转到缓冲区列表的下一个文件
:set autowrite
13. 标签页 与 折叠栏
标签页的新建:
tabedit file/ tab split
标签页的切换
tabn/tabp
标签页的关闭
tabclose/tabonly 关闭当前的标签页
按键 gt/gT 向前切换,向后切换
创建一个折叠
zf200G 将光标和200行之间的代码行折叠起来
折叠的打开与关闭
za:打开和关闭折叠
zr/zm: 一层一层地打开和关闭折叠
zR/zM: 分别打开和关闭所有的折叠
折叠键的光标移动
zj: 跳转到下一个折叠处
zk: 跳转到上一个折叠处
删除折叠
zd:删除光标下的折叠
zD:删除光标下的折叠以及嵌套的折叠
zE:删除所有的折叠标签
创建的折叠退出vim之后就失效了。
14. 多窗口操作
分割窗口
split/vsplit filename
窗口间跳转
ctrl + w hjkl
ctrl + w w
移动窗口
ctrl + W HJKL
调整窗口尺寸
ctrl + w +/- 调正窗口的高度
ctrl + w </> 调整窗口的宽度
ctrl + w = 将当前窗口设置
:resize n
关闭窗口
close: 关闭一个窗口
qall: 退出所有窗口
qall!:放弃修改,退出所有窗口
wqall:保存并退出所有窗口
wall: 保存所有窗口