zoukankan      html  css  js  c++  java
  • vim第五章 命令行模式

    vim第五章命令行模式

    技巧 27 结识vim的命令行模式
    在命令行模式中执行的命令有被称作ex命令    在按/调出查找提示符或者<C-r>=访问表示寄存器时 命令行模式也被激活    
    我们可以用ex命令读写文件(:edit和:write),创建新标签页:tabnew   分割窗口:split    操作参数列表 :prev/:next
    缓冲区列表:bprev/:bnext
    本节主要关注用来编辑文本的ex命令    在这些命令中  绝大部分都可以指定所操作的范围  
    :copy命令快速复制一行
    :t  复制行
    :normal快捷方式指定范围内的行做相同的修改
    操作缓冲区文本的ex命令
    :【range】delete【x】 删除指定范围内的行  到寄存器x中
    :【range】rank【x】 复制..
    :【line】put【x】 在指定行后粘贴x中的内容
    :【range】copy{address} 将指定的行copy到地址指定的行下
    :【range】move【address】 将指定的行copy到地址指定的行之上
    :【range】join 连接指定范围内的行
    :【range】normal【commands】 对指定范围内的每一行执行普通模式命令
    :【range】substitute/{pattern}/{string}/[flags] 将指定范围内的行{pattern}的地方替换为{string}
    :【range】global/{pattern}/【cmd】 对指定范围内匹配{pattern}的所有行  在其上执行ex命令 {cmd}
    vim命令行模式中的特殊按键
    插入模式  文本被输入到缓冲区中   命令行模式中文本出现在命令行上
    插入模式和命令行模式通用的命令
    <C-w> <C-u>   分贝删除开头和行首
    <C-v> <C-k> 插入键盘上没有的字符
    <C-r>{register}  将任意寄存器的内容插入到命令行
    EX命令影响范围广距离远
    有时 ex命令能比普通模式命令更快地完成同样的工作
    也即能够在多行上同时执行   同时修改
    技巧  28 在一行或多个连续行上执行命令
    ex命令很多需要【range】指定要操作的范围   我们可以用行号、位置标记或者查找模式来指定范围的开始位置及结束位置
    用行号作为地址
    ex命令只包含数字   vim会将数字解析为一个地址    并把光标移动到该数字指定的杭商
    :1
    :print
    打印第一行的内容
     
    :3p
    p为print的缩写    

    打印第3行的内容

    还有其他的命令  例如3d  删除第3行      等价于  普通模式下的3G  然后执行dd
    用地址指定范围
    :2,5p
    打印从第2到第5行的内容
    :{start},{end}
    符号.代表当前行的地址  
    :.,$p
    从当前行到尾行的所有行   打印
    %   代表当前文件中的所有行
    :%p    此种形式在和:substitute命令一起使用
    打印文中的所有行  等效与:1,$p
    :%s/practical/pragmatic/
    将每行内的第一个practical替换为pragmatic   
    用高亮选区指定范围
    先执行2G   再跟着执行VG   选中第2行到尾行的所有行      而不是命令行模式中的数字指定
    此时:进入命令行模式   会预先填充一个范围:'<,'>   接着我们输入一条ex命令   使它在每个选中的行上执行
    :'<,'>p
    在退出可视模式后任然存在    在普通模式下运行:'<,'>p   会回显上一次高亮选区所选中的内容
    用模式指定范围
    :/<html>/,/<html>/p
    此种方式比数字更加可靠
    用偏移对地址进行修正
    :/<html>/+1,/<html>/-1p
    对在<html></html>之间的每一行都运行一条ex命令    但是不包括html的两行
    偏移的一般形式为:{address}+n
    此处如果n被省略   缺省偏移量为1   {address}可以是行号  位置标记或者查找模式
    例子
    :2
    :.,.+3p
    相当于:2,5
    结论
    定义范围的语法比较灵活   既可以混合搭配行号、位置标记以及查找模式   也可以对他们加以偏移
    符号 地址
    1 文件的第一行
    $ 文件的最后一行
    0   虚拟行  位于文件第一行的上方
    . 光标所在的行
    'm 包含位置标记m的行
    '< 高亮选区的起始行
    '> 高亮选区的结束行
    % 整个文件 (:1,$的简写形式)
     
    第0行  在文件中并不真实存在   但是作为一个地址   在某些特定场景下会很有用     特别是当把指定范围的行复制或移动到文件开头时,可以用它做:copy{address}   及:move{address}命令的最后一个参数
    :range定义的是一系列连续的行      :global命令可以定义一系列非连续行
    技巧 29 使用:t      和:m命令复制和移动行
    :copy命令及其简写的形式:t   我们可以把一行或多行从文档的一部分复制到另一部分     
    :move  简写为:m    可以把一行或多行移动到其他地方
    line 1 shopping list
    2 hardware store
    3 buy new hammer
    4     beauty parlor
    5 buy nail po~
    6 buy nails
    用:t命令复制行   或者:co    或者:copy
    光标在第二行
    :6copy.     将第6行的内容复制到当前行的下方  完成复用
    命令格式为 :【range】copy{address}
    将前面范围指定的内容复制到后面地址所在行的下方
    实例
    命令 用途
    :6t. 把第6行复制到当前行的下方
    :t6 把当前行复制到第6行的下方
    :t. 为当前行创建一个副本   类似于普通模式下的yyp
    :t$ 把当前行复制到文本结尾
    :'<,'>t0 把高亮选中的行复制到文件的开头
    其中的t.会创建副本  相当于普通模式中的yyp   但是区别是yyp用寄存器      t.则不会使用   所以在我们不想覆盖默认寄存器中的内容时    会用到t.来复制行
    在普通模式中<C-o>   会快速调回原来的位置   然后用p命令来创建副本
    用:m命令移动行
    :move命令看上去和:copy命令很相似
    :【range】move{address}
    对应的普通模式的命令
    dGp     删除高亮选区   G跳转到文件的结尾    p粘贴刚删除的文本
     
    例子
    Vjj    选中当前的行以及下方的两行
    :'<,'>m$ 移动到末尾
     
    重复上次的ex命令简单    只需要按@:  即可     比普通模式更方便
    技巧30在指定范围上执行普通模式命令
    在一系列连续行上执行一条普通模式的命令   可以用:normal命令   通常与.命令结合使用
    同技巧2的实例
    在每行的后面添加;
    首先定位光标到第一行的行首
    A;<Esc> 添加;到末尾
    jVG 选中第二行到行尾   范围
    :'<,'>normal . 对高亮选中区中的每一行  都执行普通模式下的.命令
      也可以用:%normal A;
    在每行添加;的时候   都会切换到插入模式   但是在修改完成之后  vim会自动返回到普通模式
     
    技巧31 重复上次的ex命令
    .命令可以重复上次的普通模式命令   如果想重复上次的ex命令  需要使用@:    
    .命令不会重复有vim命令行中做出的修改   需要用@:来替代    注意@前面不需要:
  • 相关阅读:
    在eclipse创建android project,最后一步点击finish没反应
    有哪些可以将网页另存图片的chrome插件?功能类似网页截图
    极品家丁—优酷全网独播喜剧
    如何安装chrome扩展?比如json-handle插件如何安装
    安装用户脚本的福音:Tampermonkey(油猴)
    多微博账号同时发微博的插件--fawave
    正能量-真正男子汉2
    如何看待优酷广告?
    秋雨连绵思晚天
    如何用Postman组装Request并且查看Response
  • 原文地址:https://www.cnblogs.com/dongguolei/p/7896440.html
Copyright © 2011-2022 走看看