高级Linux运维工程师养成记-vim编辑器从入门到进阶

高级Linux运维工程师养成记-vim编辑器从入门到进阶

vim编辑器概述

vim是Linux平台上功能强大基于模式的文本编辑工具,可以用于文本编辑、脚本开发、甚至是程序开发等等应用场景。相对于gedit(图形化界面的文本编辑器)会让初学者感觉到挺难用,因为要记住大量的命令,但是一旦熟练运用后效率高于其他文本编辑工具。

检查系统中是否安装了vim,只需要执行vim命令,如果能够输出如下所示的版本信息,则表示该系统上可以使用vim,退出vim可以使用:q<Enter>

CentOS8.2的vim
vim

如果安装系统是选择的最小化安装,则需要使用yum install -y vim来安装vim编辑器

vim编辑器的安装路径是/usr/bin/vim

[root@centos8 ~]# which vim
/usr/bin/vim

而安装包是vim-enhanced-8.0.1763-13.el8.x86_64,CentOS系列可以使用rpm -qf查看 软件安装包的来源

[root@centos8 ~]# rpm -qf `which vim`
vim-enhanced-8.0.1763-13.el8.x86_64

和vim编辑器类似的编辑器还有vi编辑器,它们两者不是同一个软件包,vim是vi(Visual Interface)的加强版。

查看vi编辑器的安装包

[root@centos8 ~]# rpm -qf `which vi`
vim-minimal-8.0.1763-13.el8.x86_64

vi和vim最大的区别就是可以语法加亮,在编辑文本时会给文本文件内容增加颜色(和路径相关)。vim完全兼容vi。

vi和vim编辑/etc/passwd文件
vi和vim编辑/etc/passwd文件

将/etc/passwd文件复制到/data目录下,然后使用vim打开

[root@centos8 ~]# cd /data/
[root@centos8 data]# cp /etc/passwd /data/
[root@centos8 data]# vim /data/passwd 

由于passwd文件的路径发生了变化(位于/data目录下),因此文件的内容不会有颜色,因为之前vim判断/etc目录是系统配置文件,才会给passwd文件的内容带颜色。
vim /data/passwd

vim打开文件

使用vim打开文件时,可以使用vim [option]... file...打开,其中常用的选项有

  • +# 打开文件后,让光标处于第#行的行首,+默认是行尾
  • +/PATTERN 让光标处于第一个被PATTERN匹配到的行首
  • -b file 二进制方式打开文件
  • -d file1 file2 比较多个文件
  • -m file 只读方式打开文件
  • e 直接进入ex模式

使用vim打开/data目录下的passwd文件,并且默认光标定位在第十行

[root@centos8 data]# vim  +10 /data/passwd

vim +# 定位指定的行数
vim +# 定位指定的行数

使用vim打开/data目录下的passwd文件,并且光标定位在以/bin开头的行

[root@centos8 data]# vim +/^bin /data/passwd

光标定位在以/bin开头的行
光标定位在以/bin开头的行

使用vim打开/data目录下的passwd文件,并且光标定位在包含FTP的行

[root@centos8 ~]# vim +/FTP /data/passwd

光标定位在包含FTP的行
光标定位在包含FTP的行

使用vim比较两个文件的差异

在vim打开文件时,如果文件存在,文件被打开并显示文件内容,如果文件不存在,当编辑后第一次存到磁盘时创建它。
首先使用vim创建两个文件,source.txt和target.txt,并查看文件内容。

在编辑source.txt和target.txt文件内容时,首先按i进入编辑模式,编辑文件后按esc退出编辑模式,然后按:进入扩展命令模式,并按wq存盘退出。

[root@centos8 data]# vim source.txt
[root@centos8 data]# vim target.txt

[root@centos8 data]# cat source.txt 
this is test content
[root@centos8 data]# cat target.txt 
this is test content
THIS IS TEST CONTENT

编辑source.txt
编辑source.txt

编辑target.txt
编辑target.txt

然后使用vim -d source.txt target.txt 比较两个文件的差异

如果想要退出可以按esc后使用:切换到扩展命令模式然后输入qall退出文本比较

[root@centos8 data]# vim -d source.txt target.txt 

vim比较source.txt和target.txt文件的差异
vim比较文件的差异

使用vim同时打开source.txt和target.txt

[root@centos8 data]# vim -o source.txt target.txt 

此时会同时开启来两个文本编辑的窗口,在左右两边窗口切换,可以先按快捷键Ctrl+w 松手后再按方向键左或者右来切换窗口,退出首先按esc,然后按:进入扩展命令模式,输入qall退出编辑窗口
vim同时打开多个文件

使用vim以只读模式打开source.txt

[root@centos8 data]# vim -m source.txt 

只读模式提示文件进制修改
修改只读文件

vim模式

vim编辑器有三种模式,分别是命令行模式(command mode)、编辑模式(edit mode)、扩展模式(extended command mode)

  • 命令模式是默认模式,主要用于查看文件、移动光标、剪切、粘贴文本,无法输入内容

  • 编辑模式主要用于修改文本

  • 扩展模式主要用于保存退出(:wq)、未修改退出(:q)、强行退出(:q!)等等。

ESC键总是用于退出当前模式,两次ESC键总是返回命令模式。

vim模式切换
模式切换

vim编辑器默认的模式是命令模式

使用vim编辑(查看)/data目录下的passwd文件,此时是命令模式,不能修改文件

[root@centos8 data]# vim /data/passwd

要修改文件需要从命令模式切换成编辑模式
命令模式切换成编辑模式可以通过 a、A、o、O、i、I键来切换

  • i表示在当前字符之前插入
  • I表示在行首插入
  • a表示在当前字符之后插入
  • A表示在行尾插入
  • o表示在下一行插入(另起一行)
  • O表示上一行插入

编辑模式下编辑/data/passwd文件

编辑模式新增内容
编辑模式新增内容

编辑完成以后按esc可以退出编辑模式,然后按:进入扩展命令模式,输入wq即可保存修改的内容并且退出vim编辑器。w表示write,q表示quit
命令扩展模式

修改完成后可以使用只读的方式查看
只读方式查看修改的内容

vim命令模式

vim命令模式-光标跳转

当使用vim打开文件时默认就进入了命令模式,在命令模式下可以使用k,j,h,l实现基于字符之间的光标跳转。

  • k表示光标向上
  • j表示光标向下
  • h表示光标向左
  • l表示光标向右

光标的上下左右移动
光标的上下左右移动

在上下左右移动时,如果想要一次性移动多个字符,可以使用数字加k,j,h,l实现。例如3+h(先按3,再按h)表示向左移动3个字符。

vim命令模式下光标跳转除了基于字符跳转以外,还可以使用w,e,b来实现单词间的跳转

  • w表示下一个单词的词首
  • e表示当前或下一个单词的词尾
  • b表示当前或者前一个单词的词首

单词词首和词尾
单词词首和词尾

还可使用数字+w,e,b实现多个单词跳转

vim命令模式下光标跳转还能再当前页跳转,命令模式下当前页跳转的常用命令

  • H 页首
  • M当前页的中间行
  • L当前页的页底
  • zt 将光标所在当前行移动到屏幕顶端
  • zz 将光标所在行移动到屏幕中间
  • zb 将光标所在当前行移动到屏幕底端

当前页
当前页部位

vim命令模式还可以实现行、句子和段落的跳转

vim命令模式光标跳转还可以实现行首行尾跳转

  • 0 跳转至光标所在行的行首
  • $ 跳转至光标所在行的行尾
  • ^ 跳转至光标所在行行首的第一个非空白字符

行首行尾跳转
行首行尾跳转

vim命令模式光标跳转还可以跳转到指定的行,通过行数+G即可

在vim命令模式下输入10和大写字母G跳转到文件的第十行

行跳转
行跳转

  • gg可以跳到文件首行的第一个字符
     gg可以跳到文件首行的第一个字符

  • G 可以跳到文件最后一行的第一个字符
    跳到文件最后一行的第一个字符

  • shfit+( 和shift+)可以实现句子之间的移动,其中(表示上一句,)表示下一句,句子是以.号结尾的内容

使用(和)实现句子之间的跳转
使用(和)实现句子之间的跳转

  • 使用{和}实现段落之间的移动,如果内容之间有空行就形成了段落,其中}表示下一段,而{表示上一段

使用{和}实现段落的跳转
使用{和}实现段落的跳转

vim命令模式操作

vim在命令模式下还可以使用相关的命令来完成字符编辑、替换、删除、复制操作

  • 编辑命令

    • x 删除光标处的字符
    • number+x 删除光标处起始的number个字符
    • xp 交换光标所在处的字符以及后面字符的位置(例如im交换之后就是mi)
    • shift+~ 转换大小写
    • J 删除当前行后的换行符
  • 替换命令

    • r 替换光标所在处的字符(单个字符)
      -R 切换成REPLACE模式,此时会替换指定的内容
  • 删除命令

    • d 删除命令,可结合光标跳转字符,实现指定范围删除,例如dgg可以删除光标到行首的内容
    • d$ 删除到行尾
    • d^ 删除到非空行首
    • d0 删除到行首
    • dw 删除单词到下一个单词的词首
    • de 删除单词到下一个单词的词尾
    • db 删除到此到前一个单词的词首
    • dd 删除所在行
    • D: 从当前光标位置一直删除到行尾,等同于d$

常用的删除操作是dd,即删除光标所在的行

  • 复制命令

    • y 复制,可以结合光标跳转字符,实现指定范围复制
    • y$
    • y0
    • y^
    • ye
    • yw
    • yb
    • yy 复制行
    • Y 复制整行
  • 粘贴命令

    • p 缓冲区存的如果为整行,则粘贴当前光标所在行的下方,否则粘贴至当前光标所在处的后面
    • P 缓冲区如存的如果为整行,则粘贴当前光标所在行的上方,否则粘贴至当前光标所在处的前面
  • 改变命令

    • c 修改后切换成插入模式
    • c$ 删除光标到行首并切换到插入模式
    • c^
    • c0
    • cb
    • ce
    • cw
    • cc 删除当前行并输入新内容,相当于S
    • C 删除当前光标到行尾,并切换成插入模式

命令模式操作文本总结

修改(替换) 删除(剪切) 复制
cc dd yy
字符 cl dl yl
单词 cw dw yw
句子头 c) d) y)
句子尾 c( d( y(
段落头 c{ d{ y{
段落尾 c} d} y}

命令模式其他命令

  • 100iliu[ESC] 粘贴liu 100次
    复制字符指定的次数
  • 起始位置加命令加结束位置
    • 0 行首
    • y 从这里开始拷贝
    • $ 行尾
    • gU变大写
    • gu变小写
    • y 复制
    • d 删除

选中行变大写
选中行变大写

  • di" 删除双引号""之间的内容
  • yi( 删除小括号()之间的内容
  • vi[ 光标在[]之间,则选中[]之间的内容
  • dtx 删除字符直到遇见光标之后的第一个x字符
  • ytx 复制字符直到遇见光标之后第一个x字符

vim编辑模式

vim扩展命令模式

使用vim打开文件时默认是命令模式,输入:可以切换成扩展命令模式

文件编辑修改完成后如果要保存退出,此时需要从编辑模式切换到扩展命令模式,输入冒号(:)即可从编辑模式切换到扩展命令模式
扩展命令模式

切换成扩展命令模式后,通常会输入wq表示存储修改的文件内容并退出vim编辑器。
保存退出

vim在扩展命令模式下存盘退出还有其他几种形式

  • q vim打开文件并未做修改,此时可以在扩展命令模式下使用q退出
  • q! vim编辑文件内容后不想保存修改的内容,可以使用q!退出,会丢失修改的内容
  • w vim编辑文件内容后保存文件内容到磁盘

除了存盘退出以外,vim编辑器的命令扩展模式还提供了一些日常运维常用的功能

  1. 使用vim的扩展命令模式实现将/etc/issue文件的内容读取到/data/passwd文件中

在扩展命令模式下输入r 然后加上文件路径并回车即可

读取文件内容到当前文件中
读取文件内容到当前文件中

读取/etc/issue文件的内容
读取/etc/issue文件的内容

读取之后的文件内容
读取之后的文件内容

  1. 使用vim的扩展命令模式实现将/data/passwd文件另存为passwd.old

在扩展命令模式下输入w 然后加上另存为文件的名称并回车即可

文件另存为
文件另存为

  1. 使用vim的扩展命令模式实现查看之前另存为文件passwd.old的详细信息

在扩展命令模式下输入!ls -l|grep passwd.old 并回车后即可查看该文件的详细信息,然后按回车可以返回到命令模式

扩展命令模式下执行命令
扩展命令模式下执行命令

执行命令的结果
扩展命令模式下执行命令的结果

  1. 使用vim的扩展命令模式读取内核版本到/data/passwd文件中

在扩展命令模式下使用r!uname -a并回车后即可实现将内核版本信息写入文件

读取内核版本写入到/data/passwd文件中
读取内核版本写入到/data/passwd文件中

写入内核版本信息成功
写入成功

vim编辑器的个性化定制

原文地址:https://www.cnblogs.com/ittimeline/p/13776468.html