zoukankan      html  css  js  c++  java
  • 常用Ex命令小结(待更新)

    在参考Learning the vi and Vim Editor的时候发现ex编辑器作为vi的父类, 对于我们深入理解vi和vi的clones的前世今生有很大的帮助, 有必要单独出一个文档来介绍一些常见常用的指令.
     
    $ex practice 在Unix下使用ex editor叫档. 显示结果:
    "practice" 6 lines, 320 characters
    :
    显示该文件的行数,多少个字符.停止在:冒号命令提示符.
     
     
    p 打印到屏幕, 1p 打印第1行到屏幕, 可以去掉p, 因为行号本身就等价于打印该行的命令. 显示结果:
    :1p
    With a screen editor you can 
    :
     
     
    用逗号隔开, 中间空格可有可无, 打印1到3行. 显示结果:
    :1,3
    With a screen editor you can
    scroll the page, move the cursor,
    delete lines, insert characters, and more,
    :
     
    vim.note已经介绍过ex的替换命令, 如果没有行号就认为作用于当前行.
    :1
    With a screen editor you can
    :/screen/line/
    With a line editor you can
    命令修改后行将会重新显示.
    :1s/screen/line/  
    With a line editor you can
     
     
    使用ex进行编辑
    许多ex命令完成的编辑操作在vi中都有更简单的等价命令可以完成.
    但在ex命令中可以使用单个命令对大的文本块进行修改, 因此在想对许多行进行修改时,ex命令会更有用.(强调一下, '在vi下执行ex命令' 和'在ex下执行ex命令'是完全两回事)
    记住在vi中每个ex命令前必须有:冒号.
              delete          d         删除行
              move            m         移动行
              copy            co        复制行
                              t         复制行
     
    行地址
    对于ex编辑器命令, 必须给出ex所要编辑的行.
    对于ex的move和copy必须给出移动或复制文本的目标位置.
    那么如何告诉ex要编辑哪些行呢?
              1   使用明确的行号
              2   使用能帮助你指定相对于文件中当前位置的行号的符号
              3   使用搜索模式作为标识所要编辑的行的地址定义行的范围
    你可以使用行号明确地定义一行或行的范围.使用明确数字的地址称为绝对行地址.
    示例:
    :3,18d       删除3到18行
    :160,224m23  将160到224行间的内容移动到23行的后面
    :23,29co100  将23到29行间的内容复制到100行的后面
     
    :1,10#  #可以暂时地显示部分行的行号.
    CTRL+G 可以显示当前行的行号.
    :=  显示总行数
    :.= 显示当前行的行号
    上面关于行号的操作可能让你觉地烟花缭乱, 但没有关系, 后面讲到配置文件的时候:setnu 命令永久显示行号, 妈妈再也不用担心我的绝对定位了.
     
    :/pattern/= 显示一个与模式相匹配的行的行号
     
    行地址符
    表示行地址的符号叫行地址符, 常用的有以下三个:
    . 表示当前行
    0 表示文件中的第一行
    $ 表示文件的最后一行
    % 表示文件中的每一行
    示例:
    :.,$d      删除当前行到最后一行的文本
    :20,.m$    将20行到当前行的文本移动到最后一行后面
    :%d        删除说有的行
    :%t$       将所有的文本复制一份拷贝到文本的末尾
    :-,+t0   将当前行的上一行和下一行加上当前行复制到文本的开头部分
     
    除了绝对地址以外,也可以指定一个相对当前行的地址.用符号+和-就像数字运算符一样,当将其方置在数字前面时,这些符号就会加上或减去跟在它们后面的数值.
    实例:
    :.,.+20d   删除当前行开始下面的20行
    :226,$m.-2 将226行到文件末尾的文本移动到当前行的上2行的下面
    :.,+20#   显示当前行和下面20行的行号
    当前行是假定的开始位置,因此在使用+或-时缺入圆点.
    如果在+和-的后面没有跟数字,它们就分别相当于+1和-1.
    注意不能把加号跟减号与其后面的数字分开.否则会发生歧意. 
    ++ 代表 当前行+1+1 就是当前行+2
    --代表 当前行-1-1 就是当前行-2
     
     
    搜索模式(注意 : 模式的前面和后面要用斜杆来定界)
    :/pattern/d  删除一个包含pattern的行
    :/pattern/+d  删除一个包含pattern的行的下面的行
    :/pattern1/,/pattern2/d 删除从第一个包含pattern1的行到第一个包含pattern2的行之间的文本
    :.,/pattern/m23 移动当前行到第一个匹配pattern的行之间的行到23行的后面
     
    vi中用模式匹配进行删除操作与在ex中使用模式匹配删除操作的不同点:
    d/while 删除从当前光标到光标后第一个匹配while字符之间的所有字符, 但是除这些字符以外在同一行上的字符会被保留
    :.,/while/d  ex会删除指定行的全部, 只要是在匹配间的行都会被删除, 同一行上的所有字符也会被删除
     
    重新定义当前行的位置
    实例:
    :100,+5 p
    First address exceeds second  第一地址在第二地址以后
     
    :100;+5 p
    当你使用;号时, 就会将第一个行地址当成当前行而重新计算.
     
    :/pattern/;+10 p
    打印第一个匹配/pattern/的行跟它下面10行的内容
    你可以使用空格来分隔ex命令中的不同元素, 但是不能在模式里把空格作为分隔符或在替换命令的结尾使用空格.
     
    全局搜索
    在vi中使用/ 来搜索文件中的字符, ex也有全局命令g, 可以让你搜索字符并显示找出的所有包含该模式的行. 使用:g! 的作用与:g相反, 使用:g!可以搜索不包含字符的行.可以使用行地址把全局搜索限制在指定的行或行范围.
    示例:
    :g/pattern      寻找移动到模式最后出现的位置
    :g/pattern/p    寻找并显示文件中所有符合模式的行
    :g!/pattern/nu  寻找并显示所有不包含模式的行,同时显示这些行的行号
    :60,124g/pattern/p  寻找并显示60行到124行之间所有符合模式的行
     
    组合ex命令
    在ex中可以使用竖直条(|).它允许用户把多个命令组合在同一个ex提示符下.在使用|时,要注意所指定的行地址.如果一个命令影响到文件中的顺序,那么下一个命令将使用新的行位置进行工作.
    注 :| shell中的管线命令,在这里起到的作用跟shell中的;作用很象
    :1,3d | s/thier/their/
    把第一行到第三行删除.然后在当前行进行替换
    :1 , 5 m 10 | g/pattern/nu
    把第一行和第五行之间的内容移动到第10行的后面,然后显示所有包含模式的行并列出行号
     
    保存和退出文件
    在vi中, 命令ZZ 退出并保存文件, 命令zz 将当前行移动到屏幕中央
    在ex中, 使用以下命令控制保存与退出:
    :w 把缓冲区的内容写到磁盘中但不退出.可以在编辑期间使用:w保护编辑操作以避免系统瘫痪或重大的编辑错误.
    :q 退出编辑器 如果对文件做了修改,在退出时会被阻拦并跳出提示.只有在没有做任何修改的情况下才能顺利的用:q退出
    :wq 保存并退出,即使文件没有修改,写操作也会无条件的执行
    :x  写文件并退出,只有修改了文件写操作也能进行
    :wq 和 :x 虽然都是写文件并退出. 但是:wq是无条件的, 而:x是在修改过的前提下,如果没有修改就:x, 会报错: No write since last change.
    :w! 强行保存 可以在只读方式下写入,但必须具有写入的权限
    :q! 强行退出 不做任何修改 缓冲区内容被删除
    :w practice.new
    我们可以将当前缓冲区中的内容保存到一个新的文件中
    :230,$w newfile
    也可以选择缓冲区中的部分文本保存到一个新的文件中
    :340,$w >>newfile
    可以将缓冲区的部分内容追加到一个文件的尾部.很像shell中的输出重定向符, 当然学过c++或者c# 的孩儿会怒认出这是输入流, 很形象吧?
     
    把文件复制到另一个文件中
    :r filename
    在当前文件中读入一个新的文件,默认插入在当前光标的下一行
    :185r filename  
    在当前文本的185行插入一个新的文件
    :$r filename
    在文件尾部插入一个新的文件
    :0r filename
    在文件的首部插入一个新的文件
    :/pattern/r filename
    在匹配模式的下一行插入新的文件
     
    编辑多个文件
    编辑多个文件不用频繁的关闭和开启vi.并且可以保留已指定的缩写和命令序列,以及复制缓冲区,这样可以在文件间复制文本.
    vi file1 file2
    首先屏幕上显示的是file1中的内容.对file1编辑结束后,:w 保存file1,:n 命令调用下一个文件file2
    :args 缩写:ar 列出在命令行上指定的文件,当前文件使用方括号括起来
    :rewind 缩写 :rew 命令把当前文件重新设置为命令行上指定的第一个文件
     
    调用新的文件
    可以在ex中用:e 命令在任何时候切换到另一个文件
    :e filename 
    调用了新的文件后vi把两个文件名记为当前文件名和备份文件名,也可以通过使用符号%和 #来表示.
    :e # 返回上一个编辑的文件          
    :r # 读取上一个编辑的文件
    :e! # 放弃对当前文本的修改,返回到上一个文件
    :n! # 放弃对当前文件的修改,返回到上一个文件
    :e!   放弃对当前文件的修改重新载入当前文件上次保存过的版本
    :w %.new  保存当前修改到当前文件名.new的一个文件中去
    如果没有首先保存当前文件,并且没有在:e和:n后面添加!来命令vi变换当前文件,那么将不允许使用上述命令来文件之间切换.
    在vi中也可以使用CTRL+^ 在文件间来回切换.这个命令与:e #相同.但是对当前文件也要保存或者放弃保存,否则vi将不允许切换到前面的文件中去.
     
    在文件之间进行编辑
    当为复制缓冲区指定了单字母名时,就拥有了把文本从一个文件移动到另一个文件的渠道.当使用:e命令把一个新的文件加载到vi缓冲区时,将不会清除命名的缓冲区.因此,通过从一个文件中复制和删除文本,使用:e调用新的文件,然后把命名缓冲区展提到新的文件中,这样就可以在文件间传输文本了.
    "f4yy  复制四行到缓冲区f
    "fp    把缓冲区中的文本粘贴到当前光标的下面
     
    另一个方法 :ya 复制 :pu 粘贴
    示例:
    :160,224ya a 讲160行到224行之间的文本复制到缓冲区a中,接下来可以使用:e命令移动到想要放置这些行的文件
    :pu a  把缓冲区a中的内容粘贴到当前行的后面
  • 相关阅读:
    xml技术基础
    apue第七章学习总结
    自然连接,外部连接,内连接,左右连接的区别与介绍(转)
    apue第六章学习总结
    《深入PHP与jQuery开发》读书笔记——Chapter2
    apue第四章学习总结
    《深入PHP与jQuery开发》读书笔记——Chapter1
    我所使用的一个通用的Makefile模板
    PHP的输出缓冲区(转)
    Nginx 日志按月分割
  • 原文地址:https://www.cnblogs.com/alfayed/p/4649762.html
Copyright © 2011-2022 走看看