zoukankan      html  css  js  c++  java
  • vi命令一览表及高级技巧

    vi是UNIX中使用最为广泛的文本编辑器,是所有计算机系统中最常用的一种编辑工具。在介绍如何使用vi之前,了解vi具有两种基本模式是很重要。这两种基本模式为输入模式和指令模式。输入模式为输入命令,文本就会显示在屏幕上;而指令模 式为输入命令就执行命令,而不会显示文字。在默认状态下,vi以指令模式下启动,因此你输入命令时不会显示文字,除非你输入命令切换至输入模式。大多数vi命令不会屏幕上显示任何东西,你只需 要知道它们的工作过程就足够了。

    进入vi的命令
    vi filename :打开或新建文件,并将光标置于第一行首 
    vi +n filename :打开文件,并将光标置于第n行首 
    vi + filename :打开文件,并将光标置于最后一行首 
    vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 
    vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename 
    vi filename....filename :打开多个文件,依次进行编辑 

    移动光标类命令 
    h :光标左移一个字符 
    l :光标右移一个字符 
    space:光标右移一个字符 
    Backspace:光标左移一个字符 
    k或Ctrl+p:光标上移一行 
    j或Ctrl+n :光标下移一行 
    Enter :光标下移一行 
    w或W :光标右移一个字至字首 
    b或B :光标左移一个字至字首 
    e或E :光标右移一个字至字尾 
    ) :光标移至句尾 
    ( :光标移至句首 
    }:光标移至段落开头 
    {:光标移至段落结尾 
    nG:光标移至第n行首 
    n+:光标下移n行 
    n-:光标上移n行 
    n$:光标移至第n行尾 
    H :光标移至屏幕顶行 
    M :光标移至屏幕中间行 
    L :光标移至屏幕最后行 
    0:(注意是数字零)光标移至当前行首 
    $:光标移至当前行尾 

    屏幕翻滚类命令 
    Ctrl+u:向文件首翻半屏 
    Ctrl+d:向文件尾翻半屏 
    Ctrl+f:向文件尾翻一屏 
    Ctrl+b;向文件首翻一屏 
    nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。 

    插入文本类命令 
    i :在光标前 
    I :在当前行首 
    a:光标后 
    A:在当前行尾 
    o:在当前行之下新开一行 
    O:在当前行之上新开一行 
    r:替换当前字符 
    R:替换当前字符及其后的字符,直至按ESC键 
    s:从当前光标位置处开始,以输入的文本替代指定数目的字符 
    S:删除指定数目的行,并以所输入文本代替之 
    ncw或nCW:修改指定数目的字 
    nCC:修改指定数目的行 

    删除命令 
    ndw或ndW:删除光标处开始及其后的n-1个字 
    do:删至行首 
    d$:删至行尾 
    ndd:删除当前行及其后n-1行 
    x或X:删除一个字符,x删除光标后的,而X删除光标前的 
    Ctrl+u:删除输入方式下所输入的文本 


    搜索及替换命令 
    /pattern:从光标开始处向文件尾搜索pattern 
    ?pattern:从光标开始处向文件首搜索pattern 
    n:在同一方向重复上一次搜索命令 
    N:在反方向上重复上一次搜索命令 
    :s/p1/p2/g:将当前行中所有p1均用p2替代 
    :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代 
    :g/p1/s//p2/g:将文件中所有p1均用p2替换 


    选项设置 
    all:列出所有选项设置情况 
    term:设置终端类型 
    ignorance:在搜索中忽略大小写 
    list:显示制表位(Ctrl+I)和行尾标志($) 
    number:显示行号 
    report:显示由面向行的命令修改过的数目 
    terse:显示简短的警告信息 
    warn:在转到别的文件时若没保存当前文件则显示NO write信息 
    nomagic:允许在搜索模式中,使用前面不带"\"的特殊字符 
    nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始 
    mesg:允许vi显示其他用户用write写到自己终端上的信息 

    最后行方式命令 
    :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下 
    :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下 
    :n1,n2 d :将n1行到n2行之间的内容删除 
    :w :保存当前文件 
    :e filename:打开文件filename进行编辑 
    :x:保存当前文件并退出 
    :q:退出vi 
    :q!:不保存文件并退出vi 
    :!command:执行shell命令command 
    :n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 
    :r!command:将命令command的输出结果放到当前行 

    寄存器操作 
    "?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字 
    "?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字 
    "?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字 
    "?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字 
    ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。 

    vi 高级技巧 
    xp:交换两个字符位置 
    ddp:上下两行调换 
    :g/^/m0/:把文件内容反转 
    :X:保存后就加密 
    J:上下两行合并 
    dG:删除所有行 
    d$:从当前位置删除到行尾 
    y$:从当前位置复制到行尾 

    删除命令操作 
    d l:删除当前字符(与x命令功能相同) 
    d 0:删除到某一行的开始位置 
    d ^:删除到某一行的第一个字符位置(不包括空格或TA B字符) 
    d w:删除到某个单词的结尾位置 
    d 3 w:删除到第三个单词的结尾位置 
    d b:删除到某个单词的开始位置 
    d W:删除到某个以空格作为分隔符的单词的结尾位置 
    d B:删除到某个以空格作为分隔符的单词的开始位置 
    d 7 B:删除到前面7个以空格作为分隔符的单词的开始位置 
    d):删除到某个语句的结尾位置 
    d 4):删除到第四个语句的结尾位置 
    d(:删除到某个语句的开始位置 
    d }:删除到某个段落的结尾位置 
    d {:删除到某个段落的开始位置 
    d 7 {:删除到当前段落起始位置之前的第7个段落位置 
    d d:删除当前行 
    d /t e x t:删除从文本中出现" t e x t"中所指定字样的位置,一直向前直到下一个该字样所出现的 
    位置(但不包括该字样)之间的内容 
    d fc :删除从文本中出现字符"c"的位置,一直向前直到下一个该字符所出现的位置(包括 
    该字符)之间的内容 
    d tc:删除当前行直到下一个字符" c"所出现位置之间的内容 
    D:删除到某一行的结尾 
    d $:删除到某一行的结尾 
    5 d d:删除从当前行所开始的5行内容 
    d L:删除直到屏幕上最后一行的内容 
    d H:删除直到屏幕上第一行的内容 
    d G:删除直到工作缓存区结尾的内容 
    d 1 G:删除直到工作缓存区开始的内容 
      
    修改命令操作 
    c l:更改当前字符 
    c w:修改到某个单词的结尾位置 
    c 3 w:修改到第三个单词的结尾位置 
    c b:修改到某个单词的开始位置 
    c W:修改到某个以空格作为分隔符的单词的结尾位置 
    c B:修改到某个以空格作为分隔符的单词的开始位置 
    c 7 B:修改到前面7个以空格作为分隔符的单词的开始位置 
    c 0:修改到某行的结尾位置 
    c):修改到某个语句的结尾位置 
    c 4):修改到第四个语句的结尾位置 
    c(:修改到某个语句的开始位置 
    c }:修改到某个段落的结尾位置 
    c {:修改到某个段落的开始位置 
    c 7 {:修改到当前段落起始位置之前的第7个段落位置 
    c tc :修改当前行直到下一个字符c所出现位置之间的内容 
    C:修改到某一行的结尾 
    c c:修改当前行 
    5 c c:修改从当前行所开始的5行内容 
     
    替换命令操作 
    s:将当前字符替换为一个或多个字符 
    S:将当前行替换为一个或多个字符 
    5 s:将从当前字符开始的5个字符替换为一个或多个字符 
    fx:往右移动到 x 字符上 
    Fx:往左移动到 x 字符上 
    tx:往右移动到 x 字符前 
    Tx:往左移动到 x 字符后 
    (注意:以上四个命令中,其中x是键入的字符) 
    ; 分号,配合 f 和 t 使用,重复一次 
    , 逗号,配合 f 和 t 使用,反方向重复一次 

    追加到缓冲区 
    对于已经有内容的缓冲区,可以继续追加内容在其后面: 
    "Ad4w:删除光标后4个字,并附加到缓冲区a 
    "Ay) :取样从光标到文件尾的内容,并附加到缓冲区a 
    "K3yy :取样从光标所在行起的3行内容,并附加到缓冲区k 
    删除从当前行开始到最后一行的所有内容 
    :.,$d:在:命令行模式下,首先可以确定命令的范围,.表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行,范围用,分隔,然后用命令d表示删除,y表示复制......最后说一句,%表示全文:%d是删除全文 

    v选中多行 
    ctrl+v纵向选择多行!

  • 相关阅读:
    java 事件监听机制组成
    关于父进程和子进程的关系(UAC 绕过思路)
    Fort.js – 时尚、现代的进度提示效果
    Hive学习之函数DDL和Show、Describe语句
    js完美的div拖拽实例代码
    SSH2框架实现注冊发短信验证码实例
    再看C#中的托付和事件
    RGB(FFFFFF)转255:255:255
    单一目的聚集操作
    智慧城市,在中国的北海边再画一个圈——大连“中国首届智慧城市协同创新峰会”请你带好笔
  • 原文地址:https://www.cnblogs.com/saintaxl/p/2311294.html
Copyright © 2011-2022 走看看