玩转vim编辑器

举报
mindtechnist 发表于 2023/04/27 10:33:38 2023/04/27
【摘要】 ​前言 vi编辑器是Linux下的标准编辑器,vi编辑器并非只是用来写程序,还可以用来对一些配置文件进行编辑。vim是vi的加强版,我们一般使用vim对文件进行编辑。本文介绍了vim编辑器的三大模式,以及相应的命令,最后介绍了如何通过vim编辑器的配置文件.vimrc根据自己的需求对vim进行配置。目录前言 一、vim三大模式的关系以及如何配置vim为默认编辑器1. 三种模式的切换2. 配置...

前言 


vi编辑器是Linux下的标准编辑器,vi编辑器并非只是用来写程序,还可以用来对一些配置文件进行编辑。vim是vi的加强版,我们一般使用vim对文件进行编辑。本文介绍了vim编辑器的三大模式,以及相应的命令,最后介绍了如何通过vim编辑器的配置文件.vimrc根据自己的需求对vim进行配置。


目录

前言 

一、vim三大模式的关系以及如何配置vim为默认编辑器

1. 三种模式的切换

2. 配置vim为默认编辑器

二、vim三种模式下的命令介绍

1. vim的命令模式(command mode) 

(1)移动光标

(2)复制、粘贴、删除、剪切

(4)查找命令

(5)替换命令与替换模式

(6)可视化模式

(7)代码格式化

(8)切换到插入模式

(9)切换到末行模式

(9)其他操作命令(撤销反撤销、查看函数原型、保存退出)

2. vim的插入模式(Insert mode)

3. vim的末行模式(last line mode)

(1)保存与退出

(2)查找与替换

(3)vim分屏显示

(4)执行shell命令

(5)查看历史命令

三、vim配置文件.vimrc

1. 配置shell下使用vim快捷键

(1)直接输入shell命令

(2)修改配置文件.bashrc

2. 配置.vimrc实现类似于Visual Assist等功能


一、vim三大模式的关系以及如何配置vim为默认编辑器

1. 三种模式的切换

vim编辑器有三个模式:命令模式(command mode)、插入模式(Insert mode)也叫做编辑模式、末行模式(last line mode)也叫底行模式。我们在shell下输入命令vi或者vim加要编辑的文件名就可以进入vi或vim编辑器(我们一般使用vim,因为vim是vi的加强版,功能更为强大)。

我们在shell下初次进入vim是进入到vim的命令模式,在命令模式下按a/i/o/s等插入键进入插入模式,插入模式下按ESC回到命令模式。在命令模式下按 : 进入末行模式,末行模式下按两次ESC回到命令模式。末行模式和插入模式之间不能直接切换。

编辑

2. 配置vim为默认编辑器

我们在shell下敲击命令vim就可以进入vim编辑器,敲击vi默认是进入vi编辑器。我们也可以通过过配置,当输入vi的时候也进入vim编辑器,有两种方法。

① 通过别名设置

alias vi="vim"

非常简单,通过别名实现,一句话搞定。

② 执行下列指令

sudo update-alternatives --install /usr/bin/editor editor /usr/bin/vim 1
sudo update-alternatives --set editor /usr/bin/vim
sudo update-alternatives --install /usr/bin/vi vi /usr/bin/vim 1
sudo update-alternatives --set vi /usr/bin/vim

二、vim三种模式下的命令介绍

学习vim可以使用官方的教程,在shell下输入命令就能查看vim教程

vimtutor

编辑

通过上下键就可以翻页学习。 

1. vim的命令模式(command mode) 

在shell下通过vim进入vim编辑器后就是命令模式,在命令模式下按下的键都会当作命令去执行,命令模式界面如下,最低下一行会显示文件名和当前光标所在行号。

编辑

(1)移动光标

最基本的上下左右移动,可以在教程中看到,四个方向键和k/h/j/l四个字母键。

编辑

 光标移动相关的命令如下表所示:

命令 作用
h/左键 光标左移一个字符
j/下键 光标下移一个字符
k/上键 光标上移一行
l(小写L)/右键 光标下移一行
0 (数字0) 移动到光标所在行行首
$ (shit + 4) 移动到光标所在行行尾
gg 移动到整个文件的首部(文件的第一个字符处)
shift+g   (G)

移动到整个文件的尾部

(G可以是shift+g,也可以是CapsLk开启大写键后直接按G键)

n shift+g   (nG)

移动到第n行

(先按数字键指定n,然后按住shift键不放,同时按g键)

(2)复制、粘贴、删除、剪切

① 删除与剪切

之所以把删除和剪切放在一起,是因为删除的内容会放在剪切板上,可以通过粘帖把剪切板(刚删除)的内容粘帖回来,这样删除就起到了和剪切一样的效果。其实,删除就是剪切,剪切就是删除,如果删除后不粘帖那就是删除,如果删除后进行粘贴操作,那就是剪切。

命令 作用

x  (小写x)

删除光标后面的字符
d+l(小写L)/右键
shift+x (大写X)

删除光标前面的字符

(X可以是shift+x,也可以是CapsLk开启大写键后直接按X键)

d+h/左键
d+方向键(箭头或hjkl) 删除相应方向的字符或行(不建议用)
dw 删除光标所在位置到光标所在单词的尾部
d shift+4  (d+$)

删除光标所在位置一直到行尾

(D可以是shift+d,也可以是CapsLk开启大写键后直接按D键)

shift+d  (D)
dd 删除一整行
ndd 删除光标所在行开始的n行

操作演示:

dw删除指令演示

编辑

 ndd命令演示,先按数字键,然后快速按两次d键

编辑

② 复制与粘贴 

粘贴操作既可以在复制后进行,也可以在删除(剪切)后进行

命令 作用
yy 复制光标所在行到剪切板
p (小写p) 将剪切板内容粘贴到光标所在位置的下一行
P (大写P) 将剪切板内容粘贴到光标所在位置的上一行

编辑 通过粘贴前后对比可以看到,粘贴会新开辟一行然后把剪切板内容复制到新开辟的这一行,而不会把原来的上一行或下一行覆盖掉,原来的下一行变为粘贴行的下一行。

(4)查找命令

比如要查找文件内所有的string

命令 用法及解释
/ 命令模式下,直接输入 /string ,回车,从文件顶部开始查找文件内所有string并高亮显示
? (shift+/) 命令模式下,直接输入?string,回车,从文件底部开始查找文件内所有string并高亮显示
# 把光标移动到要查找的字符串string上,按#便可以查找所有string并高亮显示
n 向下遍历查找到的字符串(依次选中下一个高亮显示的string)
N (shift+n) 向上遍历查找到的字符串(依次选中上一个高亮显示的string)

① / 与 n 用法演示(?与N同理)

当我们按下 / 后,在最下面会变成这样

编辑

 然后在 / 后面输入需要查找的字符串

编辑

按回车键可以看到,所有的printf都已经高亮显示了

编辑

 按一下n可以发现,光标移动到下一个高亮显示的printf处了

编辑

 ② #用法演示

把光标停在要查找的字符串处,按#即可高亮选出所有,通过n和shift+n可以在被选出的字符串之间遍历。

编辑

编辑

(5)替换命令与替换模式

命令 作用
r 在输入一个字符c,就可以将光标后面的一个字符替换为c
shift+r (R) 进入替换模式
Esc 退出替换模式

① 替换单个字符

找到要替换的字符,把光标停在字符前面,按r,在输入需要替换成的目标字符就可以替换成功。

编辑

 ② 进入替换模式

按 shift+r 也就是R就可以进入替换模式,这时会在最下面显示替换二字

编辑

 现在就可以通过上下左右键来移动光标,并输入字符替换光标后面的字符,直到按Esc键退出替换模式。

(6)可视化模式

 命令模式下按v就可以进入可视模式,我们在前面讲的复制粘贴删除等等操作只能是按行、按单词或者按字母操作,在可视模式下,我们可以通过选中来操作自己需要的任意个字符。可视模式的作用相当于Windows下,你按住鼠标左键并拖动,这样一个选中功能,然后在对选中的内容进行操作。

命令 作用
v 命令模式下按v进入可视模式,通过移动光标来选中内容
y 复制
d 删除(剪切)
p 在光标位置后面粘贴
P (shift+p) 在光标位置前面粘贴

操作演示:

按下v的时候就相当于按下了鼠标的左键,通过方向键移动光标就相当于移动鼠标来选中内容,然后对选中的内容操作。

首先在命令模式下按一下v(按完就松开,不用像鼠标一样一直按着),然后按左键和下键选中几行内容

编辑

 等需要的内容全部被选中后,按y进行复制,然后移动光标到需要粘贴的位置,按p

编辑

复制完成,如果需要再次操作,在按一下v,然后进行上面的操作。

(7)代码格式化

命令 作用
>> 当前光标所在的行右移一个Tab
n>> 当前光标所在的行开始往下数n行,全部右移一个Tab
<< 当前光标所在的行左移一个Tab
n<< 当前光标所在的行开始往下数n行,全部左移一个Tab
gg=shift+g (gg=G) 对整个文件的代码进行自动调整

 用法演示:

右移一个Tab键,按住shift,按两下>键

编辑

五行一块右移一个Tab,5>>命令,把光标移动到要右移的内容的第一行,先按一下数字5,按住shift连按两下>即可。

编辑

 代码整体调整命令gg=G,按键顺序 g g =  shift+g

调整前代码

编辑

 gg=G命令格式化之后代码

编辑

(8)切换到插入模式

命令 作用(下面的插入是指进入插入模式后把光标放在哪)
i 在光标前插入(如果是竖条光标表现为在光标当前位置插入,其实竖条光标对应的块状光标就是选中了竖条光标后面的一个字符)
I (shift+i) 在行首插入
a 在光标后插入
A (shift+a) 在行尾插入
s 删除光标后的元素,并进入插入模式
S (shift+s) 删除当前行的内容,并把光标放在行首进入插入模式
o 在光标所在行的下一行新开辟一行,并在行首插入
O (shift+o) 在光标所在行的上一行新开辟一行,并在行首插入

s命令的演示

编辑

 通过对比可以看到,竖条光标后面的字符没了,并且进入了插入模式,对应的块状光标应该是光标当前选中的字符被删除并进入插入模式。

(9)切换到末行模式

命令 作用
:(冒号) 进入末行模式,在末行模式下可以执行命令

进入末行模式后,最下面会显示一个冒号:

编辑

(9)其他操作命令(撤销反撤销、查看函数原型、保存退出)

① 撤销与反撤销

命令 作用
u 撤销上一个命令,撤销刚才的操作(相当于Windows下的ctrl+z),可以理解为一些集成开发环境的后退键
ctrl+r 撤销刚才的撤销,反撤销,也就是撤销刚才的 u 操作,可以理解为一些集成开发环境的前进键

② 进入man帮助手册 

命令 作用
K (shift+k) 把光标移动到函数处,按K进入man帮助手册
n K (n shift+k) n是一个数字,表示进入man帮助手册的第n章
q+Enter 退出man帮助手册

演示:

把光标移动到函数上,按shift+k,便可以进入man帮助手册 

编辑

使用2 shift+k命令对scanf函数进入man帮助手册第二章,对库函数进入man手册第二章是进不去的,因为man的第二章是系统调用相关的,对某个函数进入man手册相应章节时应该对号入座,否则就直接shift+k不选章节。

编辑

 使用3 shift+k 命令进入man手册第三章,成功进入,在左上角有数字3,F(3)表示这是man帮助手册的第三章。

编辑

③ 保存并退出

命令 作用
ZZ (shift + z z) 保存并退出文件,直接在命令模式下敲击两个大Z即可保存并退出,相当于末行模式下的 :wq

2. vim的插入模式(Insert mode)

插入模式就是编辑模式,没什么好讲的,就是开始对文件进行编辑,通过上下左右键可以移动光标,底部会有插入两个字提示当前在插入模式。但是,默认情况下编辑文件还是非常不方便的,比如不像集成开发环境那样可以自动补全括号,函数提示等,但是我们可以对vim进行配置,这些在后面一章讲解。

编辑

3. vim的末行模式(last line mode)

末行模式也叫底行模式,只能在命令模式下按冒号:进入,在插入模式下无法进入,进入末行 后可以在最后一行冒号的后面输入命令。

编辑

(1)保存与退出

命令 作用
w 保存
q 退出
wq 保存后退出
x (小写)
q! 强制退出(不保存)

wq保存后退出是我们最常用的命令

编辑

(2)查找与替换

命令 作用
s/src/des 将光标所在行的第一个src替换为des
s/src/des/g 将光标所在行的所有src替换为des
%s/src/des 整个文件每一行的第一个sec都替换为des
%s/src/des/g 整个文件每一行的所有sec都替换为des

用法演示:

① s/src/des

因为这个命令是把光标所在行的第一个src替换为des,所以替换之前,一定要在命令模式下,把光标放到src处,否则执行会报错,比如要把某一行第一个int替换为char

命令模式下,先把光标移动到int处

编辑

 冒号:进入末行模式,并输入命令 s/int/char,回车执行,可以看到第一个替换成char了,第二个没有替换。

编辑

② s/src/des/g

把一行所有int替换为char,同样需要在命令模式下把光标移动到相应行,否则vim不知道你要替换的字符串是哪一行的

编辑


③ %s/src/des

这个不需要在命令模式下设置光标位置,因为这个替换是对整个文件操作的,原始文件

编辑

 把整个文件每一行第一个char换成int,%s/char/int,回车运行

编辑

④ %s/src/des/g

整个文件所有char替换为int,最后还会提示替换了几次,替换了几行。

编辑

(3)vim分屏显示

命令 作用
sp filename 横屏分屏显示filename文件,如果不加文件名,则分屏显示光标所在的文件(当前光标在哪个文件就分屏再显示一个此文件)
vsp filename 竖屏分屏显示filename文件,如果不加文件名,则分屏显示光标所在的文件(当前光标在哪个文件就分屏再显示一个此文件)
q 退出一个文件,不能加文件名,输一次q退出一个文件(关闭一个分屏),当前光标在哪个文件就退出哪个文件
w 保存,保存当前光标所在分屏的文件(当前光标在那个文件就保存哪个文件的修改)
qall 退出所有文件,并回到shell
wqall 保存并退出所有文件,回到shell
ctrl+ww 切换到下一个分屏(在分屏显示的各个文件之间切换)
: 进入底行,输入命令

用法演示:

① 横屏分屏

当前打开test.c,再打开文件hello.c和123.c,首先打开test.c

编辑

按:进入末行模式,输入sp hello.c

编辑

 再次按:进入末行模式,输入sp不加任何文件名,它会默认打开当前光标所在的文件,也就是hello.c,光标所在的文件也就是被选中的文件,其文件名会有高亮的背光可以区分。

编辑

 按住ctrl然后按两次w(Ctrl+ww)可以让光标在这三个文件中进行切换,以便于对某个文件进行修改。按一个q,会把当前选中的文件退出(文件名高亮显示、光标所在文件),qall关闭所有文件并进入shell。

② 竖屏分屏

原理和操作与横屏相同,这里只看效果,个人感觉竖屏视觉效果更好,且对比文件更方便。 

编辑

(4)执行shell命令

命令 作用
!shell命令 执行shell命令

输入!ls -l,相当于执行shell下的命令ls -l,同样可以删除文件,当我们在vim编辑器的末行模式下删除文件test后,再转到shell下查看,可以看到test文件已被删除。

编辑

编辑

(5)查看历史命令

和shell一样,在末行模式下可以通过上下键查看历史命令

命令 作用
上键 查看上一条历史命令
下键 查看下一条历史命令

三、vim配置文件.vimrc

1. 配置shell下使用vim快捷键

(1)直接输入shell命令

第一种方法直接在shell下输入命令

set -o vi

这样在shell下就可以使用vim编辑器的快捷键了,在shell下按Esc就能进入vim的命令模式,i/a/$/0等快捷键就可以使用并进入vim的插入模式,下面简单演示一下,比如我输入很长的一个命令,但是发现少写了sudo命令,如果没有vim的快捷键0(在行首插入),可能需要按好多下左键才能移到行首并添加sudo,现在我直接按Esc进入命令模式,按0就可以在行首插入。又比如我输入的命令有误,需要删除,在shell下需要一直按删除键,有了vim快捷键,直接Esc进入命令模式,然后dd删除一行。

编辑

 按Esc进入命令模式(如果你按非进入插入模式的字母键没反应说明当前在命令模式了),按dd

编辑

 一行命令直接被删除。

(2)修改配置文件.bashrc

使用第一种方法,每次重新开机命令就失效了,要想永久有效,可以修改配置文件.bashrc,其实我们每次开机进入shell之前,系统都会运行.bashrc这个文件,我们只要把上面的命令加到这个配置文件中,就相当于每次开机都执行了一次 set -o vi,这样就可以永久有效了。

.bashrc文件的位置,在~目录下,通过ls命令的-a选项可以看到(因为是隐藏文件),使用vim编辑器打开.bashrc并添加命令即可。

编辑

编辑

2. 配置.vimrc实现类似于Visual Assist等功能

.vimrc文件的位置在~目录,通过 ls -a 命令可以看到,使用vim编辑器打开即可编辑

编辑
vim ~/.vimrc

编辑

 上面是最常用的几个配置,前三个是设置Tab缩进的距离,set nu 表示显示行号。这些都是很基本的,那么下面来点高级的,首先看下效果,我在shell下直接通过 vim 1.c 创建一个C文件

编辑

 新创建的C文件直接包含了文件信息(文件名、作者、单位、时间),并且写好了main函数框架和头文件,如果你经常使用Visual Studio开发的话,应该用过Visual Assist插件吧(红苹果插件,如果你没用过的话一定要试试,非常强大,在我的资源有上传哦),这个功能有点像Visual Assist插件,非常方便,并且看起来很高级,其实这也是通过.vimrc配置出来的,具体内容如下

func SetTitle()
	if expand("%:e") == 'c'
	    call setline(1,"/****************************************************************************")
		call append(line("."),"  >File Name  : ".expand("%"))
		call append(line(".")+1,"  >Author     : QQ")
		call append(line(".")+2,"  >Company    : QQ")
		call append(line(".")+3,"  >Create Time: ".strftime("%c"))
		call append(line(".")+4,"****************************************************************************/")
		call append(line(".")+5,"#include <stdio.h>")
		call append(line(".")+6,"#include <stdlib.h>")
		call append(line(".")+7,"int main()")
		call append(line(".")+8,"{")
		call append(line(".")+9,"	")
		call append(line(".")+10,"	return 0;")
		call append(line(".")+11,"}")
endfunc

就是在.vimrc中加了一个函数,这个函数的功能是给新创建的C文件添加一些通用的内容。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。