温故而知新--Linux学习笔记(三)Vim编辑器的使用

Vim编辑器,Vi编辑器的扩展版本,在Linux这种重点强调一切皆文件、弱化文件后缀的操作系统中,其应用可以说无处不在,相当广泛。但是对于习惯了Windows操作系统使用的人(比如我)来说,想要舍弃早已熟悉且方便的鼠标操作,改而使用纯键盘的操作,确实是一大难题。尤其对于Vim编辑器复制、粘贴、剪切、撤销等简单操作以及分屏操作、批量修改、关键字匹配等较复杂的操作,全要用键盘来操作,更是有点不太适应。今天,我把学过的、用过的常用Vim编辑器的操作总结一下,以帮助不太熟悉的同学,更是为温故而知新之目的。

一、vimrc文件简单配置:

vinrc是vim编辑器的配置文件,所在路径为:/etc,在vimrc文件中,包含了Vim编辑器一些基本的配置。在默认的vimrc中可能没有回车自动对齐、显示行号等配置,那么就需要我们为自己的vim编辑器添加这些配置(vim /etc/vimrc打开配置文件):

set number//显示行号(set nu为其简写,效果相同)
set tabstop=n//设置Tab键的长度(一个Tab的空格数),n为可变值
set autoindent//根据格式自动缩进
set cindent shiftwidth=n//设置自动缩进的缩进长度,n为可变值
set nowrap//设置为不自动换行,只有在回车时才换行
set hls//关键字高亮显示(set nohls取消设置)

设置完毕后,wq保存,以后再次打开新的配置就生效了。当然,为特殊需求,我们可以在Vim的命令行模式下,设置set,使得在当前vim窗口下,某个配置生效(比如在vim命令行模式下输入“:set nonu”,可以使得当前窗口下vim编辑器中,不显示行号以方便鼠标选定复制,而当退出vim重新打开时,此修改就不再生效,依旧显示行号)

二、vim基本操作:

在Windows操作系统中,我们经常使用Ctrl+C、Ctrl+X、Ctrl+V、Ctrl+Z、Ctrl+Y等这些快捷键操作,进行复制粘贴撤销等操作。而在Linux中vim编辑器,这些快捷键都用不了,所以对于Vim的快捷方式,我们应该熟悉它并且掌握它,才能使我们在编程时如鱼得水、游刃有余。

1、编辑器的模式:

而对于这些操作要有所熟悉,首先我们得知道Vim编辑器有几个不同的编辑模式状态:

(1)、命令模式(command mode):用于输入命令。vim filename打开文件之后便处于命令行模式,输入“:”冒号之后就可以输入命令以及其他类似命令输入的方式操作(按上下键也可以翻看历史命令与操作);
(2)、插入模式(Insert mode):用于编辑、插入文本。vim filename打开文件之后输入“i”、“o”等字母会以不同方式进入插入模式;
(3)、可视模式(Visual mode):用于可视化的的高亮并选定正文,在可视化模式下若已选中目标,则先按v再按ESC退出可视化模式。
(4)、末行模式(last line mode):设置环境、查找匹配等操作,一般归于命令行模式。

这几种模式的转化关系如下所示:
温故而知新--Linux学习笔记(三)Vim编辑器的使用_第1张图片

2、打开、退出、查找、替换等操作:

(1)、打开与插入:

vim filename//打开文件filename,光标处于上一次退出之处
vim filename +//打开文件filename并且处于文件最后一行
vim filename +n//打开文件filename并且处于文件第n行

我们打开文件之后,处于vim模式的命令模式,如何进行各种模式之间的转换呢?我们详细来说明:

进入插入模式:
a/*在光标所在处之后插入*/
A/*进入光标所在行末处*/
i/*在光标所在处之前插入*/
I/*在光标所在行行首插入*/
o/*在光标所在行与下一行之间新增一行进行插入*/
O/*在光标所在行与上一行之间新增一行进行插入*/

进入命令模式:
在插入模式下按ESC即可进入命令模式

在可视化模式模式下有两种方式进入命令模式:
①按v进入可视化模式,按v就能退出可视化模式;
②按两次ESC键退出可视化模式,即回到命令模式。

(2)、退出与保存:

退出与保存的方式如下:

在命令行模式下输入":"冒号进入末行模式,然后输入:
q/*退出vim回到shell命令提示符*/
q!/*强制退出不保存*/
w/*保存不退出*/
w!/*强制保存不退出*/
wq/*保存并退出*/
wq!/*强制保存并退出*/
/*q表示退出(quit),w表示写入保存(write),!表示强制执行*/

(3)、搜素查找:

我们经常需要查找匹配字符,在vim下我们可以这样做:

在命令行模式下:
输入“/字符串”:从当前光标在所在位置往下找(按小写n找下一个,按N找上一个);
输入“?字符串”:从当前光标在所在位置往上找(按小写n找上一个,按N找下一个);
/与?刚好是相反的,无论是哪种方式,只要我们一按n或者N可以观察到在窗口末行(末行模式),向下找时会显示”/字符串”,而向上找时会显示”?字符串”。二者只是一个标志而已。

(4)、查找替换:

对于替换操作,我们在VC++6.0中以及一些Windows软件中进场使用Ctrl+H来操作,而在Linux的vim中,我们这样做:

/*old表示需要替换的字符(目标字符),new表示替换之后的字符*/
在命令行模式输入":"进入末行模式,输入:
①、n,m s/old/new/*将文本中第n行到第m行每行的的第一个old替换成new*/
②、n,m s/old/new/g/*将文本中第n行到第m行所有old替换成new*/
③、1,$ s/old/new/*将文本中每行的第一个old替换成new*/
④、1,$ s/old/new/g/*将文本中所有old替换成new*/

/*其中s(search)表示搜索,g(global)表示全部*/

另一种方式(与上面作用所对应):
③、% s/old/new
④、% s/old/new/g

还有一种单个字符的替换方式:

处于命令行模式,光标所在位置为需要替换字符:
先按s,再输入需要替换成为的字符(替换完毕保持命令模式)
先按r,再输入需要替换成为的字符(替换完成后进入插入模式)

(5)、批量插入:

①、定位光标      /*上下左右键移动,或者按住Ctrl键在输入一个数字n再按上下左右键表示一次移动n行或者n列*/
②、Ctrl+v            /*进入Visual Mode模式*/
③、nj                    /*设定需要加入的行数5j表示在光标处向下选定五行,也可以按上下键选定行数*/
④、 I                    /*进入插入模式(大写)*/
⑤、输入要插入的文本
⑥、ESC       /*退出插入模式后生效*/

效果截图:
温故而知新--Linux学习笔记(三)Vim编辑器的使用_第2张图片

光标最开始在第五行,按Ctrl+v后输入5j便向下再选定了5行(共6行)。再按I进入插入模式,之后输入hello再按ESC退出插入模式。(生效之后光标移动一下才能看出结果)
温故而知新--Linux学习笔记(三)Vim编辑器的使用_第3张图片

3、复制、粘贴、删除、撤销等操作:

这里只介绍一些常用的方法:
复制:在命令模式下输入v进入可视模式,按上下左右键选定需要复制的内容(其它方式也可以如nj直接选择n行),之后按y就复制到缓冲区等待粘贴。
剪切:同样的选中方法,按d表示剪切(若不选中直接输入dd表示接剪切光标所在一行)。
粘贴:在复制或者接剪切之后,移动光标只需要粘贴的目的位置,按p表示粘贴在光标之后,按P表示粘贴在光标之前。
删除:其实删除就是dd或者选中之后d,只不过不粘贴即可。
撤销:撤销上一步操作,一般都是复制粘贴或者删除的操作执行有问题,Windows下一般是Ctrl+z,vim下则是在命令模式下按u即可,按多次则是撤销多次操作。
取消撤销操作:取消之前撤销错误操作的操作,即撤销Ctrl+z或者u操作,Windows下是Ctrl+y,linux下vim中则是Ctrl+r。

三、Vim的高级操作(分屏与多文件操作):

有时我们需要从不同文件向当前问文件复制粘贴,但是鼠标操作不方便且有格式问题,而且在没有桌面的系统下无法使用鼠标,那么分屏与多文件操作就十分实用,使用方法:

/*要操作的文件为:file1.txt和file2.txt*/
1、vim file1.txt file2.txt/*同时打开两(多)个文件,并处于命令模式*/
2、输入"Ctrl+w":接着输入v(纵向分屏),s(横向分屏),c(撤销上一次分屏操作)
/*可多次执行Ctrl+w,v、s、c操作*/
/*也可以直接vim -o file1.txt file2.txt横向分屏*/
/*vim -O file1.txt file2.txt纵向分屏*/
3、分屏之后,"Ctrl+w":接着按上下左右键进行光标在不同分屏中的切换
4、而此时所有分屏中都现实的是file1.txt,要在不同分屏中显示不同文件,如下操作:
    在当前分屏中的命令模式下输入
    ":next"即可切换至上一个文件
    ":previous"为切换至下一个
    ":first"为切换至第一个
    ":last"为切换至最后一个
    /*bn也可以切换至下一个,bp为切换至上一个文件,一般会这两个就可以了*/
5、退出:wq只能一个一个退出,分了多少屏就得wq多少次,当然也可以一次性wqa(write quit all)全部保存并退出。

如果当前已经打开一个文件,不想在退出重新打开两个,也可以这样做:

在当前命令模式下输入
:vs  文件路径/文件名      //在新的垂直分屏中打开文件
:sv  文件路径/文件名      //在新的水平分屏中打开文件

测试(打开echo_server.c和echo_client.c两个文件分屏之后进行复制操作):
温故而知新--Linux学习笔记(三)Vim编辑器的使用_第4张图片

你可能感兴趣的:(Linux使用与操作系统原理)