Vim
本教程是基于ACWing的《Linux基础课》所做,希望大家支持ACWing
Vim是终端里的编辑器,可根据文件扩展名,自动判断编程语言
功能
-
命令行模式下的文本编辑器。
-
根据文件扩展名自动判别编程语言,支持代码缩进、代码高亮等功能。
-
使用方式:
vim filename
如果已有该文件,则打开它。
如果没有该文件,则打开个一个新的文件,并命名为filename。
模式
共三种模式
-
一般命令模式
Vim的默认模式,刚进去就是这个模式,但不允许编辑。
命令输入方式:按不同字符,即可进行不同操作,可以复制、粘贴、删除文本等。
-
编辑模式
在一般命令模式里按下
i
,会进入编辑模式。按下
Esc
会退出编辑模式,返回到一般命令模式。 -
命令行模式
在一般命令模式里按下
:
/
?
三个字母中的任意一个,会进入命令行模式。命令行在最下面。可以查找、替换、保存、退出、配置编辑器等。
设置行号
在复制代码时,有时候若有行号,复制时会连带行号一起复制了,所以需要取消行号之后再复制代码
设置行号
:set nu
取消行号:
:set nonu
此处的nu代表number的意思
进入编辑模式
输入 i
进入一般命令模式
输入Esc
移动光标
←
:光标向左移动一个字符
↓
:光标向下移动一个字符
↑
:光标向上移动一个字符
→
:光标向左移动一个字符
若没有小键盘,vim提供了 h
j
k
l
h
是←
,j
是↓
,k
是↑
,l
是→
注意,在vim中,光标移到最边上时,不会跳到另外一行去,且一般命令模式时,会卡在最后一个字符的前面,在编辑模式时,会卡在最后
光标向右移动n个字符
前提:处于一般命令模式中
n<space>
此处n
不代表键盘字母n,而是表示数字,按下数字后再按空格<space>
,光标会向右移动这一行的n个字符
可以自动换行,如果到了行末,会自动换行
光标移动到本行开头
0
或 功能键[Home]
光标移动到本行末尾
$
或 功能键[End]
光标移动到最后一行
Shift + g
或 G
注意是大写G
光标移动到第n行
:n 或 nG
n
为数字
nG
的意思是 按下一个数字
然后再按G
,注意是大写的G
光标移动到第1行
gg
相当于1G
光标向下移动n行
n<Enter>
区别于n<space>
,<space>
是向右,<Enter>
是向下
查找字符串
/word # 向光标之下寻找第一个值为word的字符串
?word # 向光标之上寻找第一个值为word的字符串
输入/
或 ?
会进入命令行模式,然后输入想要寻找的字符串
/int
找到之后回车,即可到达目标位置
重复前一个查找操作
n
若已经找了第一个int,无需再次输入\int
或?int
,只需要按n
,就会按上一次的命令执行查找,继续往下或往上寻找目标字符串,并且这个查找是循环进行的
反向重复前一个查找操作
N
注意是大写N,且如果上一次查找是向光标之上,则会往光标之下查找
替换操作
:n1,n2s/word1/word2/g # 在第n1行和第n2行之间寻找word1这个字符串,并将该字符串替换为word2
:1,$s/word1/word2/g # 将全文的word1替换为word2
:1,$s/word1/word2/gc # 将全文的word1替换为word2,且在替换前要求用户确认
$
表示最后一行
例如,将代码的第5行到第七行之间的int都替换为double
:5,7s/int/double/g
若是gc
,则每次替换时,都会确认是否替换该单词,可以选择取消替换
关闭查找关键词高亮
:noh
只是当前查找时会关闭,下一次查找时,高亮还在
选中文本
按下v
后,就可以用方向键
选择文本
取消选中状态:按两下Esc
剪切
在一般命令模式下使用
d # 剪切选中的文本
dd # 剪切当前行
这个d
可以当成删除使用
dd
可以直接剪切一整行
复制
在一般命令模式下使用
y # 复制选中的文本
yy # 复制当前行
粘贴
在一般命令模式下使用
p # 将复制的数据在光标的下一行/下一个位置粘贴
若复制的内容是一整行,则会粘贴在光标的下一行
若复制的是选中的文本,则会粘贴在光标的下一个位置
撤销
u # 撤销
取消撤销
ctrl + r
在windows中,类似的操作如下:
Ctrl + z # 撤销
Ctrl + Shift + z # 取消撤销
挂起当前进程
Ctrl + z
恢复当前进程
fg
将选中文本整体移动
需要事先使用v
选中
Shift + > # 将选中的文本整体向右移动
Shift + < # 将选中的文本整体向左移动
将整行内容移动
需要按两次方向键
Shift + > + >
Shift + < + <
保存
在命令行模式中
:w
强制保存
在命令行模式中使用
:w!
退出
在命令行模式中使用
:q
强制退出
在命令行模式中使用
:q!
保存并退出
在命令行模式中使用
:wq
强制保存退出
在命令行模式中使用
:wq!
设置成粘贴模式
若直接从外面复制shift + Insert
,粘贴进vim中时,若代码在复制时就已经有缩进了,则vim可能会出现重复多次缩进,自动缩进反而弄巧成拙,导致代码格式混乱。
所以需要paste模式,其可以取消代码自动缩进
:set paste
设置成粘贴模式以后,在编辑模式下是无法自动缩进的
取消粘贴模式
:set nopaste
取消粘贴模式以后,编辑模式下是可以自动缩进的
删除全部内容
gg + d + G
其实就是一个组合键:ggdG
gg
表示从第一行开始
d
是表示要剪切
G
表示删到最后一行
将一行代码格式化
==
将全文格式化
格式化的意思是,若代码格式不对,可以直接调整为正确代码格式
gg + = + G
也是一个组合键:gg=G
gg
表示从第一行开始
=
表示格式化
G
表示格式化到最后一行
取消当前执行的命令
当vim卡死时,可以取消当前正在执行的命令
Ctrl + q
异常处理
读写冲突
若在另一个进程中已经打开了某个文件,若此时同时打开该文件,则两者同时写,就会有冲突,就会报错
解决办法:保证只有一个进程在打开这个文件即可,即让其他进程关掉此文件
临时文件
每次用vim编辑文件时,会自动创建一个 .filename.swp
的临时文件
若打开某个文件时,该文件的swp文件已存在,则会报错。
解决办法:
- 找到正在打开该文件的程序,并退出
- 直接删除掉该swp文件即可