Linux——文本编辑器Vim

Linux中的所有内容以文件形式管理,在命令行下更改文件内容,常常会用到文本编辑器。我们首选的文本编辑器是Vim,它是一个基于文本界面的编辑工具,使用简单且功能强大,更重要的是,Vim是所有Linux发行版本的默认文本编辑器。

很多UNIX和Linux的老用户习惯称呼它为Vi, Vi是Vim的早期版本,现在我们使用的Vim(Vi improved)是Vi的增强版,增加了一些正则表达式的查找、多窗口的编辑等功能,使得Vim对于程序开发来说更加方便。想了解Vi和Vim的区别,可以在Vim命令模式下输入":help vi_diff",就能够看到两者区别的摘要。

值得一提的是,Vim是慈善软件,如有赞助或评比得奖,所得钱财将用于救助乌干达孤儿。软件使用是免费的,使用者是否捐款赞助当然不会勉强。

1、Vim的工作模式

在使用Vim编辑文件前,我们先来了解一下它的三种工作模式:命令模式、输入模式和编辑模式,如下图所示:

1.1、命令模式

使用Vim编辑文件时,默认处于命令模式。在此模式下,可以使用上、下、左、右键或者k、j、h、l命令进行光标移动,还可以对文件内容进行复制、粘贴、替换、删除等操作。

1.2、输入模式

在输入模式下可以对文件执行写操作,类似在Windows的文档中输入内容。进入输入模式的方法是输入i、a、o等插入命令,编写完成后按Esc键即可返回命令模式。

1.3、编辑模式

如果要保存、查找或者替换一些内容等,就需要进入编辑模式。编辑模式的进入方法为:在命令模式下按":"键,Vim窗口的左下方会出现一个":"符号,这时就可以输入相关的指令进行操作了。指令执行后会自动返回命令模式。

对于新手来说,经常不知道自己处于什么模式。不论是自己忘了,还是不小心切换了模式,都可以直接按一次Esc键返回命令模式。如果你多按几次Esc键后听到了"嘀------"的声音,则代表你已经处于命令模式了。

2、进入Vim

了解了Vim的工作模式后,就可以愉快地使用Vim进行文件编辑了。先来看一下Vim打开文件的方法。

2.1、使用Vim打开文件

使用Vim打开文件很简单,例如,明哥想打开一个自己编写的文件/test/vi.test,打开方法如下:

powershell 复制代码
    [root@itxdl ~] vim /test/vi.test

刚打开文件时进入的是命令模式,此时文件的下方会显示文件的一些信息,包括文件名、文件的总行数和字符数,以及当前光标所在的位置等,此时可以使用插入命令进入输入模式对文件进行编辑,如下图所示:

2.2、直接进入指定位置

如果想直接进入Vim编辑文件的指定行数处或者特定字符串所在行,节省编辑时间,例如,打开/tmp/passwd.vi文件时直接进入第20行,则可以这样操作:

powershell 复制代码
    [root@itxdl ~] vim +20 /tmp/passwd.vi

打开文件后,直接进入"nobody"字符串所在行,则可以这样操作:

powershell 复制代码
    [root@itxdl ~]# vim +/nobody /tmp/passwd.vi

如果文件中有多个"nobody"字符串,则会以查到的第一个为准。

3、Vim的基本应用

打开文件后,接下来开始对文件进行编辑。Vim虽然是一个基于文本模式的编辑器,但却提供了丰富的编辑功能。对于习惯使用图形界面的朋友来说,刚开始会较难适应,但是熟练后就会发现,使用Vim进行编辑实际上更加快速。

3.1、插入命令

从命令模式进入输入模式进行编辑,可以按下I、i、O、o、A、a等键来完成,不同的键只是光标所处的位置不同而已。当进入输入模式后,你会发现,在Vim编辑窗口的左下角会出现"INSERT"标志,这就代表我们可以执行写入操作了,如图下图所示:

常用的插入命令:

css 复制代码
    i   ------在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
    I   ------在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行
    首再执行i命令
    a   ------在当前光标所在位置之后插入随后输入的文本
    A   ------在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令
    o   ------在光标所在行的下面插入新的一行。光标停在空行的行首,等待输入文本
    O   ------在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本

注意:在Linux纯字符界面中,默认是不支持中文输入的。如果想要输入中文,则有三种方法:

(1)安装中文语言支持和图形界面,在图形界面下输入中文,使用gVim(Vim的图形前端)。

(2)安装中文语言支持,使用远程连接工具(如PuTTY),在远程连接工具中调整中文编码,进行中文输入。

(3)倘若非要在Linux纯字符界面中输入中文,则可以安装中文插件,如zhcon。

3.2、光标移动命令

在进行编辑工作之前,需要将光标移动到适当的位置。Vim提供了大量的光标移动命令,注意这些命令需要在命令模式下执行。下面介绍一些常用的光标移动命令。

3.2.1、以字符为单位移动

powershell 复制代码
    上、下、左、右方向键       ------移动光标

习惯使用鼠标的用户可能很自然地想到用光标来进行编辑定位,但是你会发现鼠标不会给你任何反应。在 Vim中进行定位需要通过上、下、左、右方向键,并且无论是命令模式还是输入模式,都可以通过方向键来移动光标(在编辑模式中,方向键是用来查看命令历史记录的)。

powershell 复制代码
    H、j、k、l      ------移动光标

外,还可以在命令模式中使用h、j、k、l 4个字符控制方向,分别表示向左、向下、向上、向左。在大量编辑文档时,会频繁地移动光标,这时使用方向键可能会比较浪费时间,使用这4个键就很方便快捷。当然,这同样是一件熟能生巧的事情。

3.3、使用Vim进行编辑

光标移动到指定位置后,如何进行编辑操作呢?Vim提供了大量的编辑命令,下面介绍其中一些常用的命令。

3.3.1、查找指定字符串

powershell 复制代码
    /要查找的字符串       ------从光标所在行开始向下查找所需的字符串
    ?要查找的字符串       ------从光标所在行开始向上查找所需的字符串
    :set ic             ------查找时忽略大小写

一个字符串可以是一个或者多个字母的集合。如果想在Vim中查找字符串,则需要在命令模式下进行。在Vim命令模式中输入"/要查找的字符串",再按一下回车键,就可以从光标所在行开始向下查找指定的字符串。如果要向上查找,则只需输入"?要查找的字符串"即可。例如,在/etc/passwd.vi文件中查找字符串"root",则运行命令如下图所示:

如果匹配的字符串有多个,则可以按"n"键向下继续匹配查找,按"N"键向上继续匹配查找。如果在文件中并没有找到所要查找的字符串,则在文件底部会出现"Pattern not found"提示,如下图所示:

在查找过程中需要注意的是,要查找的字符串是严格区分大小写的,如查找"shenchao"和"ShenChao"会得到不同的结果。如果想忽略大小写,则输入命令":set ic";调整回来输入":set noic"。如果在字符串中出现特殊符号,则需要加上转义字符"\"。常见的特殊符号有\、*、?、^、 等。如果出现这些字符,例如,要查找字符串" 10 等。如果出现这些字符,例如,要查找字符串"10 等。如果出现这些字符,例如,要查找字符串"10",则需要在命令模式中输入"/10$"。

还可以查找指定的行。例如,要查找一个以root为行首的行,则可以进行如下操作:

powershell 复制代码
    /^root

要查找一个以root为行尾的行,则可以进行如下操作:

powershell 复制代码
    /root$

3.3.2、使用Vim进行替换

powershell 复制代码
    r       ------替换光标所在处的字符
    R       ------从光标所在处开始替换字符,按Esc键结束

小写"r"可以替换光标所在处的某个字符,将光标移动到想替换的单个字符处,按下"r"键,然后直接输入替换的字符即可;大写"R"可以从光标所在处开始替换字符,输入会覆盖后面的文本内容,直到按Esc键结束替换。

3.3.3、使用Vim进行删除、粘贴、复制

powershell 复制代码
    x               ------删除光标所在字符
    nx              ------从光标所在位置向后删除n个字符,n为数字
    dd              ------删除整行。如果之后粘贴,则此命令的作用是剪切
    ndd             ------删除多行
    dG              ------删除从光标所在行到文件末尾的内容
    D               ------删除从光标所在处到这行行尾的内容
    :起始行,终止行d  ------删除指定范围的行
    yy或Y          ------复制单行
    nyy或nY        ------复制多行
    p               ------粘贴到当前光标所在行下
    P               ------粘贴到当前光标所在行上

如果处于命令模式下,则可以按下"x"键来删除光标所在位置的单个字符;快速按两下"d"键来进行整行删除;如果想要删除连续多行,例如,想要删除10行,则可以按下"10dd",可以快速删除当前光标所在行下10行。

此时被删除的内容并没有真正删除,都临时放在了内存中。将光标移动到指定位置处,按下"p"键,就可以将刚才删除的内容又粘贴到此处。在软件开发中可能需要将连续两行进行互换,就可以先将上面的一行通过"dd"键删除,再将光标移动到下面,通过"p"键将其重新粘贴,这样就能够达到两行互相交换位置的目的。

有时候可能需要把两行进行连接。如在下面的文件中有两行,现在需要使其成为一行,实际上就是将两行间的换行符去掉。可以直接在命令模式中按下"J"键,按下前后分别如下图所示:

3.3.4、使用Vim撤销上一步操作

powershell 复制代码
        u           ------撤销

如果不小心误删除了文件内容,则可以通过"u"键来撤销刚才执行的命令。如果要撤销刚才的多次操作,则可以多按几次"u"键。

3.4、保存退出命令

Vim的保存和退出是在命令模式中进行的,为了方便记忆,只需要记住w、q、!三个符号的含义即可完成保存任务。

powershell 复制代码
    字母"w"    ------保存不退出
    字母"q"    ------不保存退出
    字符"!"    ------强制性操作

例如,在命令模式中只输入"w"字母就意味着保存但不退出;如果输入"wq"就意味着保存并且退出;如果输入"w!"或"wq!"就意味着强制保存或强制保存退出,这种情况经常发生在对一个文件没有写权限的时候(显示readonly,如下图所示),但如果你是文件的所有者或者root用户,就可以强制执行。

其他用法,如"q!"表示不保存退出;保留源文件,而另存为其他的文件,可以用"w新文件名",如"w /tmp/shadow.vi"。

在命令模式中,还可以输入"ZZ"命令退出,按两次"Shift+Z"快捷键比较方便,强烈推荐。此时如果对文件没有修改,就是不保存退出;如果对文件已经进行了一些修改,就是保存后退出。

相关推荐
女神下凡18 分钟前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范
@兽血沸腾1 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
且从容.4 小时前
Ubuntu安装flume
linux·ubuntu·flume
承渊政道4 小时前
Linux网络学习【Reactor反应堆模式】
linux·网络·学习·ubuntu·reactor
讯捷蓝达6 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
且从容.7 小时前
ubuntu安装flink
linux·ubuntu·flink
爱和冰阔落9 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
程序员沉梦听雨9 小时前
WSL2的安装与使用
linux·wsl
微小的鱼9 小时前
Linux的渲染与显示系统链路
android·java·linux
lisanmengmeng9 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器