前言

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文件添加一些通用的内容。其实,这只是冰山一角,可以配置的内容非常多,如果你懒得动手,可以直接把我写好的配置文件.vimrc拷贝到你的~目录下把原来的覆盖掉即可,下面有我写好的.vimrc文件可以下载,请点链接vim编辑器配置文件.vimrc-CentOS文档类资源-CSDN下载该配置文件包含了设置行号、Tab缩进大小等基本配置,并且还有为新创建的C文件、C++文件、H头文件、更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_43471489/85218977

【二、玩转vim(vi)编辑器】三大模式及命令介绍、如何通过配置文件.vimrc配置vim编辑器相关推荐

  1. Linux Vim三种工作模式(命令模式、输入模式和编辑模式)详解

    通过前面的学习我们知道,Linux 系统中所有的内容都以文件的形式进行存储,当在命令行下更改文件内容时,常会用到文本编辑器. 我们首选的文本编辑器是 Vim(至于为什么,可查看<Vi和Vim的区 ...

  2. Linux文件系统层级结构图和vim中三个模式的命令

    Linux系统中一些最重要的目录: /usr     安装的软件.共享的库,包含文件和静态只读程序.重要的子目录有: -/usr/bin:用户命令 -/usr/sbin:系统管理命令 -/usr/lo ...

  3. Linux—vim/vi 翻页跳转命令快捷键

    关注微信公众号:CodingTechWork,一起学习进步. 以下组合若没有特殊说明,基本都是键位组合. vim翻页 vim翻半页 ctr-d:向后翻半页 ctr-u:向前翻半页 vim整整页 ctr ...

  4. 第五讲、文本编辑器(vim/vi)

    简介:vim/vi是一个功能强大的全屏幕文本编辑器,建立.编辑.显示文本文件.vim/vi没有菜单,只有命令. 下面都要切换到"命令模式"才会生效:

  5. Vim/Vi 编辑器,删除总结

    在linux服务器,无法避免和vi编辑打交道,在命令行模式下删除数量少还好,如果删除很多,光靠删除键一点点删除真的是头痛,还好Vim/Vi有快捷的命令可以删除多行.范围. 删除行 在Vim/Vi中删除 ...

  6. 实用技巧:Linux操作系统Vim/Vi编程提速

    Vim/Vi一直是UNIX/Linux系统上最流行的文本编辑器,从2001年接触UNIX至今,Vim/Vi始终是我修改系统文件.编写简单程序的首选编辑器,是居家旅行必备之工具.如何提升它的编写速度,本 ...

  7. linux vim命令跳到67行,Linux学习之Vim/Vi使用(十三)

    Linux学习之Vim/Vi使用 Vim/Vi简介 Vim/Vi工作模式 Vim/Vi基本使用 Vim/Vi应用技巧 Vim/Vi简介 Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UN ...

  8. centos7 vim查找_如何在 Vim/Vi 中快速查找和替换文本内容

    Vim 是 Vi 多模式命令行编辑器的加强版,通常默认的Unix或Linux系统中都默认自带Vi命令编辑器.当然,为了更好的体验,如果系统默认没有安装Vim,建议安装Vim. 通过本文的讲解,你将学会 ...

  9. linux 中 vim/vi的常用命令

    文章目录 简介 normal模式(正常模式) insert模式(插入模式) command模式(命令模式) vim的启动 退出vim 显示和取消行号 光标移动操作 撤销 恢复 文本删除 复制与粘贴 搜 ...

  10. linux vim 搜索关键词,在Vim/Vi中搜索关键字就这么简单

    原标题:在Vim/Vi中搜索关键字就这么简单 本文描述了如何在Vim / Vi中执行搜索操作. Vim或其前身Vi预装在macOS和大多数Linux发行版上.搜索文本是处理文件时最常见的任务之一.当您 ...

最新文章

  1. 机房监控系统解说--发电机篇
  2. Spark Streaming 实战案例(二) Transformation操作
  3. 克隆手游是如何“杀”死独立游戏开发的?
  4. Linux下rpm安装软件
  5. c语言算法单循环球队比赛安排,单循环赛赛程安排算法研究.doc
  6. PacketTracer简单使用】
  7. 看《当幸福来敲门》观后感
  8. wmware虚拟网卡 VMnet8 VMnet1未识别网络解决方法
  9. 企鹅的java游戏_那只小企鹅终究要和我们告别了,腾讯又两款游戏宣布停运
  10. 一小时人生服务器维护,TapTap《一小时人生》手游:说好的一小时人生模拟,我却只能活6分钟...
  11. 书架html5,基于HTML5 Canvas的CSG构造实体几何书架
  12. utf8编码和utf8mb4编码(其它编码简介)
  13. Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
  14. centos7 杀不死 httpd (Apache )
  15. 人人都爱写总结,却少有人做计划
  16. 基于Python新生报到系统设计与实现 开题报告
  17. 学习方法、艾宾浩斯遗忘曲线
  18. 湖南文旅数据中心:湖南文旅数据早知道(9月10日)
  19. 上海长亮java笔试题_java笔试题整理
  20. 运输层(3.运输控制协议TCP概述)

热门文章

  1. MyBatis(一)------目录
  2. Oracle autotrace使用说明
  3. SpringBoot整合jsp技术
  4. mysql存储引擎分类
  5. LUA脚本语言的简介
  6. 通过Visual C#创建一个Windows组件,然后把其接口以COM形式发布即可(转贴)
  7. TypeError: Object of type ‘int64‘ is not JSON serializable
  8. python turtle绘图
  9. vue怎么使用eval_javascript - 在方法内部的Vue2中使用eval()可以工作,但不能同时工作 - 堆栈内存溢出...
  10. ubuntu16.04 修改本机密码