• Linux系统中的vi/vim指令【详解】


        vi是Unix世界里极为普遍的全屏幕文本编辑器,vim是它的改进版本Vi IMproved的简称。几乎可以说任何一台Unix机器都会提供这套软件。

        只要简单的在Shell下执行vi就可以进入 vi 的编辑环境。在实际操作之前先对它有个了解会比较好。

        vi 有两种模式,输入模式以及指令模式。输入模式即是用来输入文字资料,而指令模式则是用来下达一些编排文件、存档、以及离开 vi 等等的操作指令。当执行 vi 后,会先进入指令模式,此时输入的任何字元都视为指令。

    第一步:

    1文本编译工具vi使用

    vi的名字取自于visual,意为“直观”,它是一个全屏幕编辑程序。还有gedit、emacs在Linux系统中vi是最常用的编辑程序,它的文本编辑功能十分强大,但使用起来比较复杂。

    2Linux系统中的vi其实是vim,是vi的增强版。vi编辑程序有两种工作模式:

    命令模式(指令模式):此模式下的按键当作指令来处理。

    输入模式:此模式的按键作为真正的输入。

    第二步:

         vi操作模式的切换,要进入输入模式,可以按如下命令键:

    新增:‘a’,从光标后开始输入文本。‘A’,从光标所在行末尾输入新的文本。

    插入:‘i’,从光标前开始插入文本。‘I’,从光标行的第一个非空格字符前开始插入文本。

    开始:‘o’,从光标所在行下新增一行并进入输入模式。‘O’,从光标所在行上新增一行并进入输入模式。

    第三步: 

        从输入模式按ESC进入命令模式

    第四步: 

        进入和退出vi

    进入vi,在提示符下:

    vi

    vi 文件名

    退出vi,在指令模式下:

    :q,退出

    :wq,存盘后退出

    :q!,不存盘强制退出

    :x,强制存盘退出

    第五步:

         删除和修改文本

    指令模式下:

    x:删除光标处的一个字符

    dd:删除光标所在行

    r:修改光标所在字符

    R:进入改写状态

    s:删除光标所在字符,并进入输入状态

    S:删除光标所在行,并进入输入状态

    第六步:

         光标移动

    1指令模式下:

    h:向左移动一列

    j 或+:向下移动一行

    k 或-:向上移动一行

    l:向右移动一列

    组合:nh,nj,nk,nl。分别是移动n行(列)

    在有方向键的键盘上,无论指令模式或输入模式都可以用方向箭头来移动光标

    2光标按行移动

    指令模式下:

    :n回车:将光标移动到第n行

    :$回车或者L:将光标移动到最后一行

    M:将光标移动到中间一行

    H:将光标移动到第一行

    :set number:显示行号

    :set nonumber:取消显示行号

      3光标按单词移动

    指令模式下:

    w:将光标移动到下一个单词头

    b:将光标移动到前一个单词头

    e:将光标移动到下一个单词尾

    组合:nw、nb、ne

    4光标按字符移动

    指令模式下:

    $:将光标移动到当前行尾

    ^或0:将光标移动到当前行首

    n|:将光标移动到当前行的第n个字符

    fm:将光标移动到当前行的下一个字符m处

    光标返回原处

    两个单引号‘’

    第七步: 

        文本编辑

    1翻页

    指令模式下:

    Ctrl+d:下翻半屏

    Ctrl+u:上翻半屏

    Ctrl+f:下翻一屏

    Ctrl+b:上翻一屏

      2查找

    指令模式下:

    /string:从当前位置向前查找字符串string

    ?string:从当前位置向后查找字符串string

    继续查找:

    n:沿前述查找方向继续查找同一字符串

    N:沿前述查找方向的反方向继续查找同一字符串

    3删除文本

    指令模式下:

    x:删除字符

    dw:删除单词

    dd:删除行

    D:删除从光标到行末所有字符

    dfm:删除从光标到第一个字符m间的文本

    :5d:删除第5行

    :5,$d:删除从第5行到最后一行

    可以和整数n组合

      4撤销和重复命令

    指令模式下:

    u:撤销最后一个更改操作

    U:撤销对本行的所有修改

      5文本替换

    指令模式下:

    m:替换当前字符为m,替换后仍为命令模式

    R:替换当前字符后的一系列字符,替换后变为输入模式。

    s:多个字符替换单个字符

    cw:单词替换

    cc:行替换

    C:替换当前行剩余部分

    cfm:替换当前字符到指定的字符m

      6文本删除与替换对比

              命令类型           删除           替换

                 字符                 x                r

                 单词               dw             cw

                  行                  dd              cc

       从光标到行尾         D               C

        从光标到字符m     dfm           cfm

      7全局替换

    指令模式下:

    搜索当前行的第一个实例

    :s/bash/sch把当前行的第一个bash换为sch

    搜索指定行的第一个实例

    :1,10s/bash/sch 把1到10行bash换为sch

    :5,$s/bash/sch 把5到末行bash换为sch

    设置过滤条件进行搜索

    :g/var/s/bash/sch把包含var行中的bash替换为sch

    同一行中替换所有实例

    :s/bash/sch/g把当前行中所有bash替换为sch

    替换整个文件中的所有实例

    :1,$s/bash/sch/g把整个文件中的bash替换为sch

    8移动和复制文本

    指令模式下:

    yy:复制当前行

    dd:剪切当前行(删除)

    p、P:粘贴当前行

     

    9复制和移动文本块

    指令模式下:

    把某(几)行复制并粘贴到某行后

    :5 copy8 把5行复制并粘贴到第8行后

    :1,5 copy$ 把1-5行复制并粘贴到末行后

    .,$ copy0 把当前行到末行复制并粘贴到文件头

    把copy改为move即为移动文本块(注:.表示当前行,0表示文件头,$表示文件尾)

    第八步: 

        文件保存

        指令模式下:

    :w 保存文件

    :wq或者:x或者ZZ 保存并退出vi,返回linux提示符

    :w f1.c 把当前文件另存为f1.c

    :q! 放弃对文件的保存,直接退出

      1保存文本块

    指令模式下:

    :2,5 write f2 把第2到第5行另存为文件f2

    保存文本块,并直接覆盖掉已有(如果有)文件

    :2 write! f2 把第2行强行另存为文件f2

    向文件追加文本

    :2 write >> f2 把第2行追加到文件f2末尾

    第九步: 

        与shell交互

    指令模式下:

    读某文件的内容到当前打开文件

    :5 read a 把文件a中的内容读到当前打开文件的第5行后

    在vi中执行shell命令

    :!pwd

    在vi中执行shell命令,并把结果添加到vi中

    :5 read! pwd把pwd执行结果插入到第5行后

    :e 在vi中编辑某文件时,不退出vi而建立新文件

    :n 在vi中编辑某文件时,不退出vi而加载新文件

  • 相关阅读:
    MySQL查询今天/昨天/本周、上周、本月、上个月份数据的sql代码
    lumen 登陆 注册 demo
    Maven与Ant的区别
    Java中String为什么是final
    一天一点MySQL复习——获取数据库系统时间、变量赋值、变量比较
    一天一点MySQL复习——存储过程
    Mybatis学习——传递Map型参数
    Java修饰符
    RegEx正则表达式学习笔记
    一天一个Java基础——通过异常处理错误
  • 原文地址:https://www.cnblogs.com/z432110/p/10651398.html
Copyright © 2020-2023  润新知