linux系统中vi/vim文本编辑器的使用简介

linux系统中vi/vim文本编辑器的使用简介

1. vi/vim简介

​ vi/vim 是linux系统中最基本的编辑器,类似于windows系统中的记事本,几乎所有的linux开发版本都内置了vi/vim文本编辑器。vim是vi的增强版本,具有编程能力,可以实现代码高亮的功能。而linux系统最核心的思想就是**“一切皆文件”**,即在linux系统中,所有的设备、硬件、用户等等都以文件的形式进行存储。在使用linux系统时,最重要的工作就是要修改以及设置一些软件的配置文件,这些工作往往在命令行中进行,所以我们至少要掌握一种命令行编辑器的用法(本文主要介绍vim)。

虽然绝大多数的linux发行版本都内置的vi/vim编辑器,但不是所有,在开始使用之前一定要确保您的电脑安装了vim,如果没有安装可以执行下面的命令进行安装:

$ sudo apt install vim

2. vim的使用

2.1 vim的三种模式

首先先来介绍一下vim的三种模式:

  • 一般命令模式(command mode):可以对文本进行复制、粘贴、删除,使用vim打开一个文件时默认进入一般命令模式。
  • 编辑模式(insert mode):可以对文本进行编辑。
  • 命令行模式(command-line mode):读取、存储文件等。

三种模式之间的转换关系如图所示:

注意:编辑模式和命令行模式之间不能相互转换!!!

2.2 用vim编辑一个文件
  1. 在opt目录下新建一个名为Hello.java的文件;
$ cd /opt
$ touch Hello.java
  1. 用vim编辑器对Hello.java文件进行编辑;
$ vim Hello.java

输入上述代码之后敲回车,按下i 进入编辑模式,在左下角会有提示;

  1. 输入下面的代码;
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello!");
    }
}
  1. 按下esc退出编辑模式,输入:进入命令行模式,依次输入w q Enter进行保存退出;
  1. 编辑完成。
2.3 一般命令模式下的按键说明

下面介绍常用的一般命令模式下的按键:

命令 功能说明
0 数字0:移动到光标所在行的最前面字符
$ 移动到光标所在行的最后面字符
gg 移动到文件第一行
G 移动到文件最后一行
:n1,n2s/word1/word2/g n1,n2为数字:在n1行和n2行之间将word1替换为word2
:1,$s/word1/word2/g 在整个文档之间将word1替换为word2
:1,$s/word1/word2/gc 在整个文档之间将word1替换为word2,且在替换前提示用户确认是否替换
dd 删除光标所在的一整行
yy 复制光标所在的一整行
nyy n为数字,复制光标所在的向下n行
p与P p:将已复制的数据在光标下一行粘贴
P:将已复制的数据在光标的上一行粘贴
u 恢复上一个操作(撤销)

:1,$s/word1/word2/g命令为例进行演示,其他命令相同

  1. 用vim打开Hello.java文件
$ vim Hello.java
  1. 输入:进入命令行模式

  2. 输入1,$s/public/PUBLIC/g

  3. 此时就会发现文件中所有的public 变成了PUBLIC ,如图所示:

2.4 一般命令模式切换到编辑模式的可用按键

从一般命令模式进入编辑模式,可以通过下面的按键实现:

命令 功能说明
i与I 进入插入模式
i:从当前光标处插入
I:在目前所在行第一个非空格符处进行插入
a与A 进入插入模式
a:从当前光标处的下一字符处插入
A:在目前所在行最后一个字符处进行插入
o与O(字母) 进入插入模式
o:从当前光标的下一行处插入新的一行
O:从当前光标的上一行处插入新的一行
r与R 进入替换模式
r:只会替换光标所在的那一个字符一次
R:会一直进行替换,直到按下ESC为止
2.5 一般命令模式切换到命令行模式的可用按键
命令 功能说明
:w 将编辑的数据写入磁盘中
:q 退出vi/vim
:wq 保存后退出
:w! 强制写入(当文件为只读时1
:q! 强制退出(不保存)
ZZ 若文件没有修改则不保存退出,若文件已被修改过,则保存后退出

命令行模式的其他可用按键

命令 功能说明
:set nu 显示行号
:set nonu 取消行号

在vim中执行:set nu 如图所示:

3. vim的可视区块

当我们要处理的内容是一个区块时,可以利用vim的可视区块。例如,我们要处理下面这种格式的文件:

192.168.1.1	host1 net
192.168.1.2	host2 net
192.168.1.3	host3 net
192.168.1.4	host4 net
192.168.1.5	host5 net
192.168.1.6	host6 net
192.168.1.7	host7 net
192.168.1.8	host8 net
192.168.1.9	host9 net

如果我们想将host1~host9复制到net后面,可以在vim中进行如下的操作:

  1. 将光标移动到host1h处;

  2. 按住ctrl + v,可以看到左下角显示:

image-20220412183217473

  1. 将光标移动到host11处,此时可以看到选中的部分已经反白;

  2. 将光标移动到底部,此时发现host1~host9全部反白;

  3. y复制反白范围;

  4. 最后将光标移动打第一行的最后,按下p,处理结果如图所示:

4. vim的关键字补全功能

vim编辑器也提供了特定语法的关键字补全功能2;以html文件为例:

  1. 创建一个名为test.html文件;

    $ touch test.html
    
  2. 用vim编辑器打开;

    vim test.html
    
  3. 假设文件中有以下代码:

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Titletitle>
    head>
    <style>
        
    style>
    <body>
        <form action="add" method="get">
            名称:<input type="text" name="fname"/><br>
            价格:<input type="text" name="fprice"/><br>
            库存:<input type="text" name="fcount"/><br>
            备注:<input type="text" name="remark"/><br>
            <input type="submit" value="添加"/>
        form>
    body>
    html>
    
  4. style标签中想输入background-color,此时可以使用自动补全功能,在输入b后按ctrl+x后再按ctrl+o会出现关键字补全提示,如图所示:

5. 总结

以上简要介绍了vim编辑器的一些常用命令,以及对部分进行了演示,但vim的命令还有很多,可以去查找一些相关书籍。


参考文献:

《鸟哥的Linux私房菜》

《Linux就该这么学》


  1. :w!强制写入时到底能不能写入跟文件的权限有关 ,并不是一定会写入 ↩︎

  2. 注意一定要使用正确的扩展名,如*.html,否则无法出现任何关键字。 ↩︎

你可能感兴趣的:(linux,vim,linux,vim)