vim编辑器是一款可以在终端下采用纯键盘操作的文本编辑器,号称“编辑器之神”,可以升级(二次开发)、可以扩展(安装插件)
1、基本用法:
进入vim:
vim filename 如果文件不存在创建该文件
保存退出:
按ESC退出编辑模式,输入ZZ保存并退出
输入i :
进入编辑模式(插入模式),编写代码
2、三种模式:
vim编辑器有三种模式,可能大家的叫法不一样,但指的对象是应该是同一个,分别是正常模式、编辑模式(插入模式)、行底模式(命令模式)。
正常模式:
一般用于阅读文件,或者使用快捷键快速修改文件内容
编辑模式(插入模式):
一般用于编辑文件,输入内容
行底模式(命令模式):
一般用于对vim进行配置,或者执行一些高级操作
三种模式的相互切换方式如下:
不同模式下有不同的使用方式,下面就介绍一下不同模式下的使用方法,具体使用还需要自己在实战中掌握。
3、正常模式
(1)光标移动
命令 | 功能 |
---|---|
h(小写字母) | 光标左移 |
j(小写字母) | 光标下移 |
k(小写字母) | 光标上移 |
l(小写字母) | 光标下移 |
gg | 光标跳转到文件开头 |
G | 光标跳转到文件末尾 |
n加回车 | 光标向下n行 |
n- | 光标向上n行 |
nG | 光标跳转到第n行 |
vim filename +n | 进入文件后光标跳转到第n行 |
(2) 删除代码
命令 | 功能 |
---|---|
x (小写字母) | 从光标开始删除一个字符 |
nx | 从光标开始删除n个字符 |
dw/de | 从光标开始删除一个连续的字符串,两者的区别在于删除/不删除字符串后的空格 |
d^ | 从光标处删除到行首 |
d$ | 从光标处删除到行尾 |
dgg | 从光标处删除到文件开头 |
dG | 从光标处删除到文件末尾 |
dd | 删除光标所在行 |
ndd | 从光标处往下删除n行 |
(3) 复制/粘贴代码
命令 | 功能 |
---|---|
yy | 复制光标所在行 |
nyy | 从光标位置开始复制n行 |
p (小写字母) | 粘贴到光标下一行 |
P(大写字母) | 粘贴到光标上一行 |
注意:复制/删除的内容会存储在缓冲区中(可以跨文件使用),可以使用P/p跨文件粘贴。
(4) 替换代码
命令 | 功能 |
---|---|
r | 替换一个字符 (按下r后再按下新的字符) |
cw | 替换一个单词 |
R | 进入替换模式(或者使用insert键) |
(5) 撤销操作
命令 | 功能 |
---|---|
u | 撤销上次操作 |
U | 撤销该行所有的操作 |
Ctrl+r | 取消撤销操作 |
4、插入模式
(1) 进入插入模式的方式
命令 | 功能 |
---|---|
i | 在光标前进入插入模式 |
I | 光标跳转到行首,进入插入模式 |
a | 在光标后进入插入模式 |
A | 光标跳转到行尾,进入插入模式 |
o | 在当前行下面插入新行,进入插入模式 |
O | 在当前行上面插入新行,进入插入模式 |
(2) 插入模式下的快捷操作
快捷键 | 功能 |
---|---|
Ctrl+p | 自动补全已出现过的变量名、函数名 |
Ctrl+C | 相当于ESC键 |
Ctrl+J/M | 相当于回车键 |
5、行底模式
(1) 撤销操作
命令 | 功能 |
---|---|
w | 写入 |
q | 退出 |
q! | 强制退出 |
wq | 保存退出 |
x | 保存退出 |
X | 使用密码加密,注意wq保存退出才生效,ZZ只保存内容不保存属性 :set key=[空格] 去掉密码(空格替换成其他的,可以修改密码) |
!cmd | 执行系统命令,例如:!ls |
/关键词 | 查找关键词(n往下查询,N往上查询) |
%s/old/new | 全部替换(如果同一行存在多个,只会修改第一个) |
set nu | 显示行号(临时设置,下次启动会恢复) |
set nonu | 取消行号(临时设置,下次启动会恢复) |
>n | 从光标处n行代码向右缩进一次 |
<n | 从光标处n行代码向左缩进一次 |
注意:在行底模式下对vim的配置都只是临时的,如果需要长期有效,需要将设置写入vim的配置文件中(~/.vimrc)
6、自定义功能
和终端一样,vim编辑器也存在配置文件。可以通过修改配置文件来自定义编辑器,如果之前没有配置过vim,配置文件需要自己创建,输入命令vim ~/.vimrc
1) 常用的vim配置
“显示行号
set number
“设置tab键的宽度
set tabstop=4
“设置自动缩进
set autoindent
“设置自动缩进的宽度
set shiftwidth=4
“设置智能缩进
set smartindent
“设置不备份
set nobackup
“设置不生成临时文件
set noswapfile
2) 自定义操作
“在插入模式下快速返回正常模式
imap jj <ESC>
这段代码的作用是在插入模式下(imap 是插入模式)绑定快捷键 jj 作为退出插入模式的快捷键,按jj等同于按ESC
注意:这段文字别复制进去了
“定义保存退出函数
func! SaveExit()
exec “wq”
endfunc
这段代码的作用是创建一个函数SaveExit(), exec “wq” 是切换到底行模式下执行wq操作,相当于 :wq,执行保存退出。
注意:这段文字别复制进去了
“映射Ctrl+z键调用保存退出函数
map <C-z> : call SaveExit()
imap <C-z> <ESC> : call SaveExit()
cmap <C-z> <ESC> : call SaveExit()
这段代码的作用是把SaveExit()函数分别在不同模式下绑定到Ctrl+z快捷键上,其中map表示正常模式,imap表示插入模式,cmap表示行底模式。由于只有在正常模式下才能使用快捷键,所以另外两个模式多了一步<ESC>的操作,从该模式退出到正常模式。
注意:这段文字别复制进去了
“添加头文件、main方法
func! InsertMain()
if &filetype==“c”
call setline(1,”#include<stdio.h>”)
call setline(2,””)
call setline(3,“int main(int argc,const char* argv[])”)
call setline(4,”{“)
call setline(5,””)
call setline(6,”}”)
exec “5”
endif
endfunc
这段代码的作用是创建InsertMain()函数,如果文件是以.c结尾的,就创建c语言代码模板
#include<stdio.h>
int main(int argc,const char* argv[])
{
}
注意:这段文字别复制进去了
“映射Ctrl+p
map <C-p> : call InsertMain()
这段代码的作用是在正常模式下绑定InsertMain()函数到Ctrl+p快捷键上
注意:这段文字别复制进去了
“保存编译运行
func! SaveGo()
exec “w”
if &filetype == “c”
exec “!gcc -std=gnu99 % && ./a.out”
endif
endfunc
这段代码的作用是创建SaveGO()函数,先保存文件,如果文件是以.c结尾的,就使用gcc工具以C99标准来编译该文件,并执行最终文件
注意:这段文字别复制进去了
map <C-x> : call SaveGo()
imap <C-x> : call SaveGo()
map <C-x> : call SaveGo()
这段代码的作用是把SaveGo()函数分别在不同模式下绑定到Ctrl+x快捷键上。
注意:这段文字别复制进去了
配置完成后,保存退出,就可以使用了新功能了,十分酷炫。也可以配置其他想要实现的功能。
结语
希望这篇文章对你有所帮助。