• Linux之使用vi编辑文件


    一、vi的名字取自于visual,意为“直观”,它是一个全屏幕文本编辑程序,在Linux系统中vi是最常用的编辑程序。Linux系统中的vi其实是vim。vi与vim的用法很像,因为vim是vi的增强版,所以vi的功能vim都有,而且vim新增了许多vi没有的功能,它比vi容易使用。vi编辑程序有两种工作模式,即命令模式和输入模式。
    二、vi的启动与退出
    1. vi的启动
    输入vi命令后,便进入全屏幕编辑环境,此时的状态为命令模式。
    (1) vi
    进入vi的一个临时缓冲区,光标定位在该缓冲区第1行第1列的位置上。
    (2) vi file1
    如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在该缓冲区第1行第1列的位置上。
    (3) vi+file1
    如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在文件最后1行第1列的位置上。
    (4) vi+Nfile1(N:为数字)
    如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在文件第N行第1列的位置上。
    (5) vi+/string file1
    如果file1文件不存在将建立此文件;如该文件存在则将其拷贝到一个临时缓冲区。光标定位在文件中第一次出现字符串string的行首位置。
    2. 退出vi
    建议在退出vi前,先按ESC键,以确保当前vi的状态为命令方式,然后再键入“:”(冒号),输入下列命令,退出vi。
    (1) :w
    将编辑缓冲区的内容写入文件,则新的内容就替代了原始文件。这时并没有退出vi,必须进一步输入下述命令才能退出vi:
    :w filename(存入指定文件)
    :q
    (2) :wq
    即将上面的两步操作可以合成一步来完成,先执行w,后执行q。
    (3) :x和zz(注意:zz前面没有“:”)
    功能与(2)等价。
    (4) :q!(或:quit)
    强行退出vi,使被更新的内容不写回文件中。仅键入命令:q时,如vi发现文本内容已被更改,将提示用户使用“:quit”命令退出。
    三、vi的两种模式
    当vi工作在命令模式下,输入的字符被视为执行特定vi功能的命令;而工作在输入模式下,输入的字符是编辑文件的正文。命令模式是vi的默认模式,命令模式下输入英文大小写字母的含义是有区别的。
    在命令模式下,你所能进行的操作有移动光标在屏幕上的位置,标记、删除、移动、复制字符或文本区块,还可以将文件写入或退出编辑器,亦可设置编辑环境,如寻找字符串、列出行号等。此外在系统提示符下输入vi及文件名称后,即进入vi全屏幕编辑画面(命令模式)。
    只有在输入模式下,才可进行文字输入,按ESC键可以回到命令模式。在命令模式下可按“i”或“a”或“o”等键进入输入模式。
    i——在目前光标前插入所要输入之文字。
    a——在目前光标后开始输入文字。
    o——在当前光标所在行下新增一空行,并从行首开始输入文字。
    I——插于行首。
    A——插于行尾。
    O——在当前光标所在行上新增一空行,并从行首开始输入文字。
    按下ESC键随时可返回vi的命令模式。如果不能确定现在vi是在哪个模式下,按下ESC键以使其在命令模式下,然后再从这里继续;如果按下ESC键时已经在命令模式了,系统会鸣叫且屏幕闪一下,通知你已在命令模式中。
    四、基本vi命令
    1. 移动光标
    移动光标h、j、k、l:分别控制光标左、下、上、右移一格。
    Ctrl+b: 上滚一屏。
    Ctrl+f: 下滚一屏。
    Ctrl+d: 下滚半屏。
    Ctrl+u: 上滚半屏。
    G: 移到文件最后。
    w: 移到下个字的开头。
    b: 跳至上个字的开头。
    2. 删除
    x: 删除当前光标所在后面一个字符。
    #x: 删除当前光标所在后面#个字符。例如,5x表示删除5个字符。
    dd: 删除当前光标所在行。
    #dd: 删除当前光标所在后面#行。例如,5dd表示删除自光标算起的5行。
    :l,#d: 例如,:1,12d表示删除自行1至行12的文字。
    X: 删当前光标的左字符。
    D: 删至行尾。
    3. 更改
    cw: 更改光标处的字到此单字的字尾处。
    c#w: 例如,c3w表示更改3个字。
    cc: 修改行。
    C: 替换到行尾。
    4. 取代
    r: 取代光标处的字符。
    R: 取代字符直到按ESC为止。
    5. 复制
    yw: 拷贝光标处的字到字尾至缓冲区。
    P: 把缓冲区的资料贴上来。
    yy: 拷贝光标所在之行至缓冲区。
    #yy: 例如,5yy,拷贝光标所在之处以下5行至缓冲区。
    6. 复原
    u: 复原至上一操作。
    g: 列出行号,及相关信息。
    7. 列出行号
    :set nu (nu为行数)
    8. 跳行
    :100可跳至第100行。
    10. 重复上一个命令
    .重复上一个命令。
    五、使用vi查找和替换
    vi提供了几种定位查找一个指定的字符串在文件中位置的方法。同时还提供一种功能强大的全局替换功能。
    1. 查找一个字符串
    一个字符串是一行上的一个或几个字符。
    为查找一个字符串,在vi命令模式下键入“/”,后面跟要查找的字符串,再按回车。vi将光标定位在该串下一次出现的地方上。键入n跳到该串的下一个出现处,键入N跳到该串的上一个出现处。
    为了在文件中回头查找,使用?代替/。在此情况下,键入n跳到该串的上一个出现处,键入N跳到该串的下一个出现处。
    如果vi找到要求的串,光标会停留在该串第一次出现的地方。如果没有找到该串,vi会在屏幕的最后一行显示pattern not found。
    查找通常是区分大小写的,如果希望vi在查找过程中忽略大小写,则键入:set ic。要使其变回默认状态,则键入:set noic。
    某些特殊字符(/&!.^*$\?)对查找过程有特殊意义,因此如果这些字符出现在查找串中必须进行转意。为转意一个特殊字符,需要在该字符前面加一个反斜杠(\)。例如,要查找字符串anything?,则键入/anything\?再按回车键。
    2. 精确查找字符串
    在vi中可以通过在字符串中加入如下特殊字符,从而使得查找更加精确。
    匹配行首,字符串要以^开头
    匹配行尾,字符串要以$结束
    匹配词首,字符串的串首键入\<
    匹配词尾,字符串的串尾键入\>
    匹配任意字符,字符串的要匹配的位置键入一个点(.)
    例如,
    要查找一个以search为行首的行,则键入/^search ,要查找一个以search为行尾的行,则键入/search$
    3. 替换一个字符串
    替换字符串是以查找为基础,所有用于查找的特殊匹配字符都可以用于查找和替换。替换时要指定替换的范围(1,n),1和n指行号,n为$时指最后一行。s是替换命令,g代表全程替换。例如,
    :l,$s/patternl/pattern2/g——将行l至结尾的文字,patternl的字符串改为pattern2的字符串,如无g则仅更换每一行所匹配的第一个字符串,如有g则将每一个字符串均做更换。
    六、编辑多个文件

    1. 将一个文件插入另一个文件中

    将另一个文件filename插入当前文件的line#行位置。

    命令格式,:line# r filename

    例如,将文件file1插入到当前文件的当前光标位置,键入,

    :r file1

    2. 编辑一系列文件要想编辑多个文件,需要在vi命令之后列多个文件名,中间用空格分开。键入:n进入下一个文件。要想跳转到下一个文件,而不保存对当前文件所做的修改,则键入:n!来代替:n。

    vi file1 file2 file3

    3. 文件之间复制行 为将行从一个文件file1复制到另一个文件file2,先编辑第一个文件file1,用#yy(#代表数字)把要复制的行拷贝到缓冲区,不退出vi,编辑另一个文件,键入,

    :n file2 再按p键,把缓冲区中的内容贴在当前光标位置。

  • 相关阅读:
    CentOS7修改网卡为eth0
    前端开发实时可视化
    push本地代码到github发生错误的解决办法
    前端面试总结(一)
    HTML5+CSS3开发移动端页面
    web安全-XSS
    前端面试总结
    JavaScript中的原型和原型链
    jQuery与Ajax
    JavaScript中模块化工具require.js
  • 原文地址:https://www.cnblogs.com/niuxiao12---/p/6925383.html
Copyright © 2020-2023  润新知