当前位置: 代码网 > 服务器>服务器>Linux > 【Linux】vim详解

【Linux】vim详解

2024年08月03日 Linux 我要评论
vim的是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的的,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多设置和类似,可以辅助记忆。并且vim针对程序员做了优化。

1.什么是vi/vim?

        简单来说,vi是老式的文本编辑器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具,就连 vim的官方网站( http://www.vim.org)自己也说vim是一个程序开发工具而不是文本处理软件。

        vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和emacs并列成为类unix系统用户最喜欢的文本编辑器。

        vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时vim与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。

2.为何要学vi/vim?

其实是有原因的,因为:

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

其实重点是上述的第二点,因为有太多linux上面的命令都默认使用vi作为数据编辑的接口,所以你一定要学会vi,否则很多命令你根本就无法操作。

3.vim的使用

基本上vim共分为3种模式,分别是一般命令模式、编辑模式与命令行模式。

这3种模式的作用分别是:

简单地说,我们可以将这3个模式想成下面的图例来表示:


注意到上面的图例,你会发现一般命令模式可与编辑模式及命令行模式切换但编辑模式与命令行模式之间不可互相切换,这非常重要。

闲话不多说,我们下面以一个简单的例子来进行说明吧!

3.1.简易执行范例

如果你想要使用vim来建立一个名为welcome.txt的文件时,你可以这样做:

3.2按键说明

除了上面简易示范的i、[esc]、:wq 之外,其实vim还有非常多的按键可以使用。

在介绍之前还是要再次强调,vi的三种模式只有一般命令模式可以与编辑、命令行模式切换,编辑模式与命令行模式之间并不能切换。

下面就来谈谈vi软件中会用到的按键功能吧!

第一部分:一般命令模式可用的功能按键说明,光标移动、复制粘贴、查找替换等

移动光标的方法
h  或向左箭头键光标向左移动一个字符
j   或向下箭头键光标向下移动一个字符
k   或向上箭头键光标向上移动一个字符
i   或向右箭头键光标向右移动一个字符
[ctrl]+[f]屏幕【向下】移动一页,相当于[pagedown]按键(常用)
[ctrl]+[b]屏幕【向上】移动一页,相当于[pageup]按键(常用)
[ctrl]+[d]屏幕【向下】移动半页
[ctrl] + [u]屏幕【向上】移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
n<space>那个n表示【数字】,按下数字n后再按空格键,光标会向右移动这一行的n个字符,例如20<space>则光标会向后面移动20个字符距离
0或功能键[home]

这是数字【0】:移动到这一行的最前面字符处(常用)

$或功能键[end]移动到这一行的最后面字符(常用)
h光标移动到这个屏幕的最上方那一行的第一个字符
m光标移动到这个屏幕的中央那一行的第一个字符
l光标移动到这个屏幕的最下方那一行的第一个字符
g移动到这个文件的最后一行(常用)
ngn为数字,移动到这个文件的第n行,例如20g则会移动到这个文件的第20行(可配合:set nu)
gg移动到这个文件的第一行,相当于1g(常用)
n<enter>n为数字,光标向下移动n行(常用)
查找和替换
/word

向光标之下寻找一个名称为word的字符串。

例如要在文件内查找vbird 这个字符串,就输入/vbird即可(常用)

?word向光标之上寻找一个字符串名称为word的字符串
n

这个n是英文按键,代表【重复前一个查找的操作】。

举例来说,

如果刚刚我们执行/bird去向下查找vbird这个字符串,则按下n后,会向下继续查找下一个名称为vbird的字符串.

如果是执行?vbird的话,那么按下n则会向上继续查找名称为vbird的字符串

n这个n是英文按键,与n刚好相反,为【反向】进行前一个查找操作,例如/vbird后,按下n则表示【向上】查找vbird
:n1,n2s/word1/word2/g

n1与n2为数字,在第n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2,

举例来说,在100到200行之间查找 vbird 并替换为 vbird则:“:100,200s/vbird/vbird/g”(常用)

:1,$s/word1/word2/g从第一行到最后一行寻找word1字符串,并将该字符串替换为word2(常用)
:1,$s/word1/word2/gc从第一行到最后一行寻找word1字符串,并将该字符串替换为word2,且在替换前显示提示字符给用户确认(confirm)是否需要替换(常用)

删除,复制,粘贴
x和x在一行当中,x为向后删除一个字符(相当于[del]按键),x为向前删除一个字符(相当于[backspace]即退格键)(常用)
nx

n为数字,连续向后删除n个字符。

举例来说,我要连续删除 10个字符,【10x】

dd删除(剪切)光标所在的那一整行(常用)
nddn为数字,删除(剪切)光标所在的向下n行,例如20dd则是删除(剪切)20行(常用)
d1g删除(剪切)光标所在处到第一行的所有数据
dg删除(剪切)光标所在处到最后一行的所有数据
d$删除(剪切)光标所在处,到该行的最后一个字符
d0那个是数字的0,删除(剪切)光标所在处,到该行的最前面一个字符
yy复制光标所在的那一行(常用)
nyyn为数字,复制光标所在的向下n行,例如20yy则是复制20行(常用)
y1g复制光标所在行到第一行的所有数据
yg复制光标所在行到最后一行的所有数据
y0复制光标所在的那个字符到该行行首的所有数据
y$复制光标所在的那个字符到该行行尾的所有数据
p和p

p为将已复制的数据在光标下一行粘贴,p则为贴在光标上一行。

举例来说,我目前光标在第20行,且已经复制了10行数据,则按下p后,那10行数据会贴在原本的20行之后,即由21行开始贴,但如果是按下p呢?那么原本的第20行会被推到变成30行(常用)

j将光标所在行与下一行的数据结合成同一行
c重复删除多个数据,例如向下删除10行,[10cj]
u恢复前一个操作(常用)
[ctrl]+r重做上一个操作(常用)
.

不要怀疑,这就是小数点,意思是重复前一个操作的意思。

如果你想要重复删除、重复粘贴等操作,按下小数点【.】就好(常用)

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

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

进入插入模式(insert mode):

i为【从目前光标所在处插入】,|为【在目前所在行的第一个非空格符处开始插入】(常用)

a和a进入插入模式(insert mode ):
a为【从目前光标所在的下一个字符处开始插入】,a为【从光标所在行的最后一个字符处开始插入】(常用)
o和o进入插入模式(insert mode):
这是英文字母o的大小写,o为【在目前光标所在的下一行处插入新的一行】;o为在目前光标所在处的上一行插入新的一行(常用)
r和r进入替换模式(replace mode):
r只会替换光标所在的那一个字符一次;r会一直替换光标所在的文字,直到按下esc为
止(常用)
esc退出编辑模式,回到一般命令模式中(常用)

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

命令行模式的保存,退出等命令
:w将编辑的数据写入硬盘文件中(常用)
:w!若文件属性为【只读】时,强制写入该文件。不过,到底能不能写入,还是跟你对该文件的文件权限有关
:q退出vim(常用)
:q!

若曾修改过文件,又不想保存,使用!为强制退出不保存

注意一下,那个感叹号(!)在vim当中,常常具有【强制】的意思。

:wq保存后退出,若为:wq!则为强制保存后退出(常用)
zz这是大写的z,若文件没有修改,则不保存退出,若文件已经被修改过,则保存后退出
:w  [filename]将编辑的数据保存成另一个文件(类似另存新文件)
:r [filename]在编辑的数据中,读入另一个文件的数据,亦即将【filename】这个文件内容加到光标所在行后面
:n1,n2 w [filename]将n1到n2的内容保存为filename 这个文件
:! command暂时退出vim到命令行模式下执行command的显示结果。例如【:!ls /home 】即可在vi当中查看/home下面以is输出的文件信息
set  nu显示行号,设置之后,会在每一行的前缀显示该行的行号
set nonu与set nu相反,为取消行号

        ok,会这些命令就已经很厉害了,因为常用到的命令也只有不到一半。通常vim的命令除了上面鸟哥注明“常用”的几个外,其他是不用背的,你可以做一张简单的命令表在你的屏幕壁纸上,一有疑问可以马上查询。


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

        目前主要的文本编辑软件都会有恢复的功能,即当你的系统因为某些原因而导致类似宕机的情况时,还可以通过某些特别的机制来让你将之前未保存的数据【救】回来,这就是鸟哥这里所谓的恢复功能。

那么vim有没有恢复功能?有的,vim就是通过缓存来恢复。

        比如说编辑/tmp/vitest/man_db.conf这个文件时,vim会主动的建立/tmp/vitest/.man_db.conf.swp的缓存,你对man_db.conf 做的操作就会被记录到这个.man_db.conf.swp当中。如果你的系统因为某些原因掉线了,导致你编辑的文件还没有保存,这个时候.man_db.conf.swp就能够发挥恢复功能了。

我们来测试一下吧!下面的练习有些部分的命令

我们尚未谈到,没关系,你先照着做,后续再回来了解。



我们使用vim打开vitest,此时会进入到vim的界面,在vim的一般命令模式下按下【[ctrl]-z】的组合键就会退出来,就像下面这样子


        当我们在vim的一般命令模式下按下[ctl]-z的组合按键时,你的vim会被丢到后台去执行。这部分的功能我们会在进程管理当中谈到,你这里先知道一下即可。

回到命令提示字符后,接下来我们来模拟将 vim的工作不正常的中断吧!


我们看最后一行那个.vitest.swp

我们来模拟vim停止工作


这个 kil 可以模拟将系统的vim工作删除的情况,你可以模拟宕机。

由于vim的工作被不正常地中断,导致缓存无法借由正常流程来结束,所以缓存就不会消失,而继续保留下来,此时如果你继续编辑那个vitest,会出现什么情况?会出现如下所示的状态:

        由于缓存存在的关系,因此 vim会主动的判断你的这个文件可能有些问题,在上面的图例中vim提示两点主要的问题与解决方案,分别是这样的:

至于这个发现缓存警告信息的界面中,有出现六个可用按键,各按键的说明如下:

  1. [o]pen read-only:打开此文件成为只读文件,可以用在你只是想要查看该文件内容并不想要进行编辑操作时。一般来说,在上课时,如果你是登录到同学的计算机去看它的配置文件,结果发现其实同学它自己也在编辑时,可以使用这个模式;
  2. (e)dit anyway:还是用正常的方式打开你要编辑的那个文件,并不会加载缓存的内容,不过很容易出现两个用户互相改变对方的文件等问题。
  3. (r)ecover:就是加载缓存的内容,用在你要救回之前未保存的工作,不过当你救回来并且保存退出vim后,还是要手动自行删除那个缓存。
  4. (d)elete it:你确定那个缓存是无用的,那么打开文件前会先将这个缓存删除,这个操作其实是比较常做。因为你可能不确定这个缓存是怎么来的,所以就删除掉它吧!。
  5. (q)uit:按下q就退出vim,不会进行任何操作回到命令提示字符。
  6. (a)bort:忽略这个编辑操作,感觉上与quit 非常类似,也会送你回到命令提示字符。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com