小白的编程经验(vim编辑器的使用)

  • Post author:
  • Post category:其他


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快捷键上。



注意:这段文字别复制进去了

配置完成后,保存退出,就可以使用了新功能了,十分酷炫。也可以配置其他想要实现的功能。



结语

希望这篇文章对你有所帮助。



版权声明:本文为Y_HF12138原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。