• Linux基础学习笔记(九)——vi和vim


    前言

    前面基本总结了Linux中一些文件的各种操作,后面开始为shell脚本的学习做好准备,这里开始总结vi和vim的内容,依旧参照《鸟哥的Linux私房菜》一书中的内容,本篇博客对应这本书中第九章的学习内容

    三种模式

    vi和vim都有三种模式——一般指令模式,编辑模式,命令行模式
    在这里插入图片描述

    三种模式的转换方式如上图所示

    一般指令模式:我们vi指令打开文件,就进入了命令模式,在这个模式中,可以通过上下键来移动光标,可以删除字符或删除整行,也可以复制黏贴文件内容,同时通过相关按钮可以退出vi和vim

    编辑模式:输入i,a,o按钮,或者insert和replace按键,进入到编辑模式,在编辑模式里头可以编辑文件内容,如果要退出该模式,按Esc键即可。

    命令行模式:在一般指令模式中,输入 /三个按钮,光标会位于屏幕最底部,在这个模式中,我们可以搜索文档中的相关内容。

    vi编辑器

    通过vi命令创建一个文件,这个就太简单了,这里就不总结了,只是总结一下vi相关的快捷键

    一般指令模式下可用的快捷键

    移动光标的操作

    按钮效果
    h 或 ←光标向左移动一个字符
    j 或 ↓光标向下移动一个字符
    k 或 ↑光标向上移动一个字符
    l 或 →光标向右移动一个字符
    [Ctrl]+[f]屏幕向下移动一页,等同于Page Down
    [Ctrl]+[b]屏幕向上移动一页,相当于Page Up
    [Ctrl]+[d]屏幕向下移动半页
    [Ctrl]+[u]屏幕向上移动半页
    +光标移动到非空格符的下一列
    -光标移动到非空格符的上一列
    n<space>n表示数字,按下数字键之后按空格,光标会向右移动这一列的n个字符。
    0 或 Home键移动到这一行开头
    $ 或 End键移动到这一行的末尾
    H光标移动到这个屏幕的最上方那一列的第一个字符
    M光标移动到这个屏幕的中央那一列的第一个字符
    L光标移动到这个屏幕的最下方那一列的第一个字符
    G移动到这个文件的最后一列
    nGn为数字,移动到这个文件的第n列
    gg移动到这个文件的第一列
    n<Enter>n为数字,光标向下移动n列

    搜寻与替换

    按钮效果
    /word向当前光标之下找寻第一个word的字符串。
    ?word向当前光标之上寻找一个字符串为word的字符串
    n这个不是数字,是英文n的按键,是next的意思,搜寻下一个匹配的字符
    N与n相反,搜寻上一个匹配的字符
    :n1,n2s/word1/word2/gn1与n2为数字,在第n1列与n2列之间寻找word1这个字符串,并将字符串取代为word2
    :1,$s/word1/word2/g从第一列到最后一列寻找word1字符串,并将字符串word1替换成word2
    :1,$s/word1/word2/gc从第一列到最后一列寻找word1字符串,并将字符串替换word2,且在取代前给出提示信息

    删除,复制与粘贴

    按钮效果
    x,X在一列字当中,x为向后删除一个字符(相当于del),X为向前删除一个字符(相当于backspace)
    nxn为数字,连续向后删除n个字符
    dd删除游标所在的那一整列
    nddn为数字,删除光标所在的向下n列
    d1G删除光标所在行到第一行的所有数据
    dG删除光标所在到最后一行的所有数据
    d$删除游标所在处,到该列的最后一个字符
    d0删除游标所在处,到该列的最前面的一个字符
    yy复制游标所在的那一行
    nyyn为数字,复制光标所在的向下n列
    y1G复制光标所在列到第一行的所有数据
    yG复制光标所在列到最后一行的所有数据
    y0复制光标所在的那个字符到该列行首的所有数据
    y$复制光标所在的那个字符到该列行尾的所有数据
    p,Pp为将已复制的数据在光标下一行贴上,P则为贴在游标上一行
    J将光标所在行与下一行的数据结合成同一行
    c重复删除多个数据,比如向下删除10行
    u复原前一个动作(类似Ctrl+z)
    [Ctrl]+r重做上一个动作
    .重复前一个动作

    一般指令模式切换到编辑模式的按钮

    按钮作用
    i,I【进入插入模式】
    i——从目前光标所在处插入。
    I——在目前所在列的第一个非空格符处开始插入
    a,A【进入插入模式】
    a——从目前光标所在的下一个字符处开始插入
    A——从光标所在行的最后一个字符处开始插入
    o,O【进入插入模式】
    o——目前光标所在的下一行出插入新的一行,
    O——在目前光标所在的上一行插入一行
    r,R【进入替换模式】
    r——只会允许替换一次
    R——可以替换多次,除非按下ESC退出替换模式为止
    Esc退出编辑模式,回到一般指令模式中

    一般指令模式切换到指令模式

    按钮作用
    :w将编辑的数据写入到硬盘
    :w!文件属性为只读的时候,强制写入该文件
    (能否写入,还要看权限)
    :q退出vi
    :q!不保存修改,直接退出
    :wq保存之后直接退出
    ZZ如果文件没有改动,则直接退出。
    如果文件有改动,则保存退出
    :w [filename]将编辑的数据存储成另一个文件(类似另存为)
    :r [filename]在编辑的数据中,读入另一个文件的数据
    :n1,n2 w [filename]将n1到n2的内容存储成filename这个文件
    :! command暂时离开vi,到指令模式下执行command的显示结果
    例如::! ls /home 暂时离开vi 查询/home的文件,按Enter回到vi
    :set nu显示行号
    :set nonu取消行号显示

    鸟哥的linux中还有一个完整的实例,跟着走一遍,对vi的使用应该算是有较好的理解了。这里就不做总结了。

    vim编辑器

    vim具有颜色显示功能,同时还支持许多的程序语法,功能比vi丰富。上面总结的vi的操作,vim几乎都支持,还提供了很多额外的功能

    区块选择

    按钮功能
    v从光标当前位置开始,
    光标所经过的地方会被选中,
    再按一下v结束
    V从光标当前行开始,
    光标经过的行都会被选中,
    再按一下V结束。
    Ctrl + v从光标当前位置开始,
    选中光标起点和终点所构成的矩形区域,
    再按一下Ctrl + v结束
    y复制选中的地方
    d删除选中的地方
    p粘贴刚选中的内容

    多文件编辑

    vim其实是支持多文件编辑的,只需要在vim命令之后同时接多个文件名即可

    ## vim 编辑hosts文件和services文件
    [root@localhost tmp]# vim hosts services
    
    • 1
    • 2

    vim下编辑多个文件的可用按键如下

    按钮功能
    :n编辑下一个文件
    :N编辑上一个文件
    :files列出当前vim编辑的所有文件

    实例如下:
    在这里插入图片描述

    多窗口编辑

    可以通过:sp {filename}指令,达到分窗口区域编辑文件的效果

    :sp filename
    
    • 1

    在vim的命令窗口情况下输入上述命令,可将文本进行分区编辑。如下动图所示
    在这里插入图片描述

    这种情况下一些可用按钮如下所示

    按钮功能
    :sp [filename]开启一个窗口,如果没有filename,
    则表示两个窗口编辑同一个文件内容
    ctrl+w+j/↓移动到下方的编辑窗口
    ctrl+w+k/↑移动到上方的编辑窗口
    ctrl+w+q等同于:q退出多窗口编辑

    《鸟哥的Linux私房菜》一书中,总结了一些vim的快捷键和指令
    在这里插入图片描述

    关于换行符

    vi和vim的使用还有些其他需要注意的,换行符是一个。

    通常情况下windows下的换行符是CRLF,而Linux下的换行符时LF,如果我们在windows下编写了shell,需要放到linux下执行,这个时候需要注意换行符的处理。这需要用到dos2unix和unix2dos工具

    ## 安装dos2unix和unix2dos
    [root@localhost vitest]# yum install -y dos2unix
    [root@localhost vitest]# yum install -y unix2dos
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    这里不演示具体实例了

    [root@localhost vitest]# ls
    man_db.conf  man.test.config
    ##将man_db.conf,由unix转成dos,会有相关提示
    [root@localhost vitest]# unix2dos -k man_db.conf 
    unix2dos: converting file man_db.conf to DOS format ...
    ##将man_db.conf转换成unix,并将转换后的内容输出到新文件
    [root@localhost vitest]# dos2unix -k -n man_db.conf man_db.conf.linux
    dos2unix: converting file man_db.conf to file man_db.conf.linux in Unix format ...
    ##查看文件的属性,会显示换行符的相关信息
    [root@localhost vitest]# file man_db.conf*
    man_db.conf:       ASCII text, with CRLF line terminators
    man_db.conf.linux: ASCII text
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    关于编码格式转换

    每个文件编码格式的转换通过iconv命令来处理
    在这里插入图片描述

    总结

    简单梳理了一下vi和vim的常见按键和用法,后面进入到shell以及linux的进程、网络管理等内容的总结

  • 相关阅读:
    神仙打架!腾讯云阿里云谁更棋高一着?
    轻量容器引擎Docker安装及其架构
    隆云通吸顶多参数传感器
    【记录】数据透视表
    DGIOT实战教程——虚拟Modbus TCP接入
    一文带你深入闭包与作用域链原理(无惧面试)
    【java源码】医院绩效考核系统源码 支持主流的“成本法”、“工作量法”、“平衡计分卡法”的绩效方案
    Kaggle | Titanic - Machine Learning from Disaster | baseline
    2022年高教社杯全国大学生数学建模竞赛-A题:波浪能最大输出功率设计(附MATLAB代码)
    docker
  • 原文地址:https://blog.csdn.net/liman65727/article/details/125470767