海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)

        系统管理员的重要工作就是要修改与设置某些重要软件的配置文件,因此至少要学会一种以上的命令行模式下的文本编辑器。在所有的Linux 发行版上面都会有的一个文本编辑器 , 那就是 vi,而且很多软件默认也是使用 vi 做为它们的编辑工具。此外 ,vim 是高级版的 vi,vim 不但可以用不同颜色显示文字内容 , 还能够进行诸如 sheII 脚本、C 语言等程序编辑,可以将 vim 视为一种程序编辑器。

vi与vim

        在Linux的世界中,绝大部分的配置文件都是以ASCII 的纯文本文件形式存在,因此利用简单的文字编辑软件就能够修改设置了 。 与微软的Windows 系统不同的是,如果用惯了 Microsoft Word或 Corel Wordperfect 的话,那么除了X Window 里面的图形用户界面模式编辑程序( 如 xemacs) 用起来尚可应付外,在 Linux 的命令行模式下,会觉得文本编辑程序都没有窗口界面来的直观与方便。

什么是纯文本文件?
         其实文件记录的就是 0 与 1 ,而我们通过编码系统来将这些 0 与 l 转成我们认识的文字。纯文本文件中只有换行、制表符等少数格式控制字符和一般可见字符

为什么要学vim

• 所有的 UNIX - like 系统都会内置 vi 文本编辑器,其他的文本编辑器则不一定会存在;
• 很多软件的编辑接口都会主动调用 vi(例如未来会谈到的 crontab 、visudo 、edquota 等命令);
• vim 具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性,方便程序设计;
• 因为程序简单,编辑速度相当快速;

什么是vim

         可以将 vim 视作 vi 的高级版本,vim 可以用颜色或下划线的方式来显示一些特殊的信息 。 举例来说,当使用 vim 去编辑一个 C 语言程序的文件,或是shell脚本程序时,vim会依据文件的扩展名或是文件内的开头信息 ,判断该文件的内容而自动调用该程序的语法判断样式,再以颜色来显示程序代码与一般信息,也就是说,这个 vim 是个程序编辑器 ,甚至一些 Linux 基础配置文件内的语法,都能够用 vim 来检查。而vi简单来说,是老式的文本编辑器。而vim里面加入了很多额外的功能,例如:支持正则表达式的查找方式、多文件编辑、区块复制等。

vi的使用

        基本上vi共分为3种模式,分别是一般命令模式、编辑模式与命令行模式。
• 一般命令模式( command mode)
        以vi打开一个文件就直接进入一般命令模式了(这是默认的模式,也简称为一般模式)。在这个模式中,可以使用[上下左右]按键来移动光标,可以使用[删除字符]或{删除整行]来处理文件内容,也可以使用[复制、粘贴]来处理你的文件内容。
• 编辑模式(insert mode)
        在一般命令模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容 。需要按下【i、I、o、O、a、A、r、R】等任何一个字母之后才会进入编辑模式。 注意了,通常在 Linux 中,接下这些按键时,在界面的左下方会出现[ INSERT 】或[ REPLACE ]的字样,此时才可以进行编辑,而如果要回到一般命令模式时,则必须要按下[ Esc ]这个按键即可退出编辑模式 。
•命令行模式( command- line mode)
        在一般模式当中,输入[:/ ?]三个中的任何一个按钮,就可以将光标移动到最下面那行。 在这个模式当中,可以提供你[查找数据]的操作,而读取、保存、批量替换字符、退出vi 、显示行号等的操作则是在此模式中完成。
这三个模式可以想成下图:会发现一般命令模式可与编辑模式及命令行模式切换,但编辑模式与命令行模式之间不可互相切换。
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第1张图片

简易执行范例

   如果想要使用vi来建立一个名为welcome.txt的文件时,可以这么做:
1、使用【vi filename】进入一般命令模式
在这里插入图片描述
        直接输入[ vi 文件名]就能够进入 vi 的一般命令模式。 不过注意 ,由于一般账号默认已经使用vim 来替换,因此如上表所示,如果使用一般账号来测试,得要使用绝对路径的方式来执行/bin/vi 才好。 另外, vi 后面一定要加文件名 ,不管该文件名存在与否。
        整个界面主要分为两部分,上半部分与最下面一行两者可以视为独立的 。
下图中的:①光标的位置②这个符号代表没有东西(非空白)③这里是显示信息,或进入命令行模式的数据
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第2张图片
如果打开的是已经存在的文件,则可能会出现如下的信息:海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第3张图片
2、按下i进入编辑模式,开始编辑文字
        在一般命令模式之中,只要按下i 、o 、a 等字符就可以进入编辑模式了,在编辑模式当中,可以发现在左下角状态栏中会出现-INSERT-的字样 ,那就是可以输入任意字符的提示 。 这个时候,键盘上除了 [ Esc ]这个按键之外,其他的按键都可以视作为一般的输入按钮。
3、按下[Esc]键回到一般命令模式
4、进入命令行模式,文件保存并退出vi环境
        保存( write )并退出( quit )的命令很简单,输入[ :wq]即可保存退出 。(注意了,按下:该光标就会移动到最下面一行去)这时你在提示字符后面输入[ Is 一l]即可看到刚刚建立的 welcome.txt 文件件。
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第4张图片
        如此一来,你的文件 welcome .txt 就已经建立 。 需要注意的是,如果文件权限不对,例如为-r–r--r-- 时,那么可能会无法写入,此时可以使用[强制写入 ]的方式,使用[ :wq!]多加一个感叹号号即可。 不过,需要特别注意,那个是在你的权限可以改变的情况下才能成立的 。

按键说明

第一部分:一般命令模式可用的功能按键说明,光标移动、复制粘贴、查找替换等
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第5张图片
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第6张图片

查找与替换

海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第7张图片

删除、复制与粘贴

海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第8张图片
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第9张图片

第二部分:一般命令模式切换到编辑模式的可用的按键说明

进入插入或替换的编辑模式

海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第10张图片
第三部分:一般命令模式切换到命令行模式的可用按键说明

命令行模式的保存、退出等命令

海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第11张图片
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第12张图片
        特别注意, 在vi 中 ,[数字]是很有意义的 ,数字通常代表重复做几次的意思 ,也有可能是代表去到第几个什么什么的意思。举例来说,要删除( 剪切)50 行,则是用[ 50dd]。 数字加在操作之前,那我要向下移动 20 行呢?那就是[ 20j ]或者也可以[ 20↓]即可 。

vim的缓存、恢复与打开时的警告信息

        目前主要的文本编辑软件都会有恢复的功能,即当系统因为某些原因而导致类似岩机的情况时, 还可以通过某些特别的机制来让将之前未保存的数据[救]回来 。而vim就是通过缓存来恢复。
        当我们在使用vim 编辑时,vim 会在与被编辑的文件的目录下,再建立一个名为.filename.swp的文件 。比如说/tmp/vitest/.man_db.conf这个文件,vim 会主动的/tmp/vitest/.man_db.conf.swp的缓存,对man_db.conf 做的操作就会被记录到这个 man_db.conf.swp 当中 。 因此如果系统因为某些原因掉线了,导致正在编辑的文件还没有保存,这个时候. man_db.conf.swp 就能够发挥恢复功能了。
在这里插入图片描述
当我们在 vim 的一般命令模式下按下[ ctrl]- z 的组合按键时,你的 vim 会被丢到后台去执行。
现模拟将vim的工作不正常的中断:
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第13张图片
这个kill 可以模拟将系统的 vim 工作删除的情况。 由于 vim 的工作被不正常地中断,导致缓存无法借由正常流程来结束,所以缓存就不会消失,而继续保留下来,此时如果你继续编辑那个 man_db. conf时,会出现什么情况如下所示的状态:
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第14张图片
        由于缓存存在的关系,因此 vim 会主动的判断你的这个文件可能有些问题,在上面的图例中 vim提示两点主要的问题与解决方案,分别是这样的:
• 问题一:可能有其他人或程序同时在编辑这个文件:
        由于 Linux 是多人多任务的环境,因此很可能有很多人同时在编辑同一个文件。 如果在多人共同编辑的情况下,万一大家同时保存,那么这个文件的内容将会变的乱七八糟。 为了避免这个问题,因此 vim 会出现这个警告窗口,解决的方法则是:
• 找到另外那个程序或人员,请他将该vim 的工作结束,然后你再继续处理 。
• 如果你只是要看该文件的内容并不会有任何修改编辑的操作,那么可以选择开启成为只读 (0)文件,即上述界面反自部分输入英文[ 0 ]即可,其实就是[O]pen Read-Only 的选项 。
• 问题二:在前一个 vim 的环境中,可能因为某些不知名原因导致vim 中断( crashed):
        这就是常见的不正常结束 vim 产生的后果,解决方案依据不同的情况而不同,常见的处理方法为 :
•如果你前的 vim 处理操作尚未保存,此时你应该要按下[ R ],亦即使用( R)ecover的选项,此时vim 会加载 man_db . conf.swp 的内容,让你自己来要决定要不要保存,这样就能够救回来你之前未保存的信息 。 不过这个 .man_db.conf.swp 并不会在你结束 vim 后自动删除,所以你退出 vim 后还得要自 行删除 .man_db.conf.swp 才能避免每次打开这个文件都会出现这样的警告 。
•如果你确定这个缓存是没有用的,那么你可以直接按下( D ]删除掉这个缓存,即( D)elete it 这选项即可 。 此时 vim 会加载man_db.conf ,并且将旧的 .man_db.conf.swp 删除后,建立这次会使用的新的 .man_db.conf.swp 。
至于这个发现缓存警告信息的界面中,有出现六个可用按键,各按键的说明如下 :
[O]pen Read-Only:打开此文件成为只读文件,可以用在你只是想要查看该文件内容并不想要进行编辑操作时。 一般来说,在上课时,如果你是登录到同学的计算机去看它的配置文件,结果发现其实同学它自己也在编辑肘,可以使用这个模式;
[E]dit anyway :还是用正常的方式打开你要编辑的那个文件,并不会加载缓存的内容,不过很容易出现两个用户互相改变对方的文件等问题 。
[R] ecover:就是加载缓存的内容,用在你要救回之前未保存的工作,不过当你救回来并且保存退出 vim 后,还是要手动自行删除那个缓存 。
[D] elete it :你确定那个缓存是无用的,那么打开文件前会先将这个缓存删除,这个操作其实是比较常做。 因为你可能不确定这个缓存是怎么来的,所以就删除掉它吧!
[Q]uit :按下 q 就退出 vim ,不会进行任何操作回到命令提示字符 。
[A]bort:忽略这个编辑操作,感觉上与 quit非常类似,也会送你回到命令提示字符 。

vim的额外功能

        vim 具有颜色显示的功能,并且还支持许多的程序语法( syntax ),因此,当使用 vim 编辑程序时(不论是 C语言,还是 shell 脚本),vim 将可以直接进行[程序除错( debug )]的功能。

可视区块

可视区块的按键意义
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第15张图片
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第16张图片
4. 此时可以按下[ y ]来进行复制,当按下 y之后,反白的区块就会消失不见 。
5 最后,将光标移动到第一行的最右边,并且再用编辑模式向右按两个空格键,回到一般命令模式后,再接下[ p]后,你会发现很有趣!
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第17张图片

多文件编辑

在 v i 内可以使用:r filename 来读入某个文件的内容。但是将整个文件读入。
可以使用vim后面同时接好几个文件来同时打开,相关的按键有:海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第18张图片
1、通过[ vim hosts /etc/hosts ]命令来使用一个 vim 打开两个文件;
2、在 vim 中先使用[ :files l 查看一下编辑的文件数据有什么?下图的最后一行显示的是[按下任意键]就会回到 vim 的一般命令模式中 。
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第19张图片
3、在第一行输入[ 4yy ]复制四行;
4、在 vim 的环境下输入[ :n ]会来到第二个编辑的文件,亦即/etc/hosts 内;
5 、在/etc/hosts 下按[ G ]到最后一行,再输入[p] 粘贴;
6、 按下多次的 [ u ]来还原原本的文件数据;
7、最终按下[ :q ]来退出 vim 的多文件编辑

多窗口功能

        在一般窗口界面下的编辑软件大多有[划分窗口]或是[冻结窗口]的功能来将一个文件划分成多个窗口的展现,而vim在命令行模式输入[ :sp {filename} ]即可。 这个 filename 可有可无,如果想要在新窗 口启动另一个文件 ,就加入文件名,否则仅输入:sp 时,出现的则是同一个文件在两个窗口间。
多窗口情况下的按键功能
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第20张图片

vim的关键词补全功能

海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第21张图片
第①组合按键中,你可能会在同一个文件里面重复出现许多相同的关键词,那么就能够通过这个补全的功能来处理。 如果是想要使用 vim内置的语法检验功能来处理取得关键词的补全,那么第②就很有用 。 不过要注意,如果你想要使用第②,就得要注意编辑的文件的扩展名。

vim环境设置与记录: ~/.vimrc、 ~/.viminfo

        vim会主动将曾经做过的操作记录下来,好让下次可以轻松地作业,这个操作的文件就是:~/.viminfo。如果之前使用过vim,那么根目录应该会存在这个文件。这个文件是自动产生的,不必自行建立。而在vim里面所做过的操作,就可以在这个文件内部查询得到。   其中可以在一般命令模式时输入【:set all】来查看,目前vim的环境设置值。
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第22张图片在这里插入图片描述
海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第23张图片

vim常用命令示意图

海创软件组-20200628-vim程序编辑器(《鸟哥的Linux私房菜》)_第24张图片

你可能感兴趣的:(海创软件组)