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命令行中做出的修改   需要用@:来替代    注意@前面不需要:

vim第五章 命令行模式的更多相关文章

  1. 《Practical Vim》第五章:命令行模式

    前言 出于历史原因,命令行模式又叫 Ex 模式,它具有的功能有: 读写文件:比如 :edit, :write 等等 创建标签页或者窗口:比如 :tabnew :split 操作缓存区,比如: bnex ...

  2. VIM命令行模式下的相关知识

    当按下:键时, Vim会切换到命令行模式: 重复上次执行的EX命令,只需按@:就可以: 在一行或多个连续行执行命令 很多的EX全天候可以指定操作范围,如行号,位置标记等: 以:print命令作为演示, ...

  3. vim命令行模式

    1. 激活命令行模式 : 进入命令行模式 <Esc>  退出命令行模式 2. 常用命令 :p 打印 (:print) :e 读入文件 (:edit) :w 写入文件 (:write) :t ...

  4. 01_Git的安装和简单使用(命令行模式+图形化模式)

      刚开始用git的小白适用,参考链接:http://www.cnblogs.com/qijunjun/p/7137207.html  实际项目开发中,我们经常会用一些版本控制器来托管自己的代码,今天 ...

  5. Linux 命令行模式 你需要知道的那些事

    注: 安装软件 pip install + 软件名  例如: pip install xadmin 卸载软件 pip uninstall + 软件名 例如 pip uninstall xadmin 安 ...

  6. Ubuntu 开机进入命令行模式

    1.修改配置 sudo vim /etc/default/grub 把 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 改为 GRUB_CMDL ...

  7. Vim中常用的命令行

    Vim中常用的命令行... ------------------- 一些真正强大的武器总不是那么容易驾驭的,主角总得付出一些努力才能收获到更加强大的力量,对于 Vim 这种上古神器来说更是如此.由于它 ...

  8. PHP 的命令行模式

    php CLI SAPI 内置Web Server 从版本 4.3.0 开始,PHP 提供了一种新类型的 CLI SAPI(Server Application Programming Interfa ...

  9. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

随机推荐

  1. java 并发容器一之BoundedConcurrentHashMap(基于JDK1.8)

    最近开始学习java并发容器,以补充自己在并发方面的知识,从源码上进行.如有不正确之处,还请各位大神批评指正. 前言: 本人个人理解,看一个类的源码要先从构造器入手,然后再看方法.下面看Bounded ...

  2. 洛谷 P1732 活蹦乱跳的香穗子

    题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...

  3. codevs 2277 爱吃皮蛋的小明(水题日常)

    时间限制: 1 s  空间限制: 32000 KB  题目等级 : 白银 Silver 题目描述 Description 小明特别爱吃蛋,特别是皮蛋.他一次可以吃一个蛋或者两个蛋(整个吞下去),而且他 ...

  4. codevs 3026 恶心的扑克

    时间限制: 1 s  空间限制: 64000 KB  题目等级 : 白银 Silver 题目描述 Description 有一副恶心的扑克,从小到大依次是3 , 4 , 5 , 6 , 7 , 8 , ...

  5. SAP云平台,区块链,超级账本和智能合约

    前一篇文章<Hyperledger Fabric on SAP Cloud Platform>,我的同事Aviva已经给大家介绍了基于区块链技术的超级账本(Hyperledger)的一些概 ...

  6. 将回车键转换为Tab键

    实现效果: 知识运用: KeyEventArgs类的KeyValue属性 public int KeyValue {get;} //获取KeyDown或KeyUp事件的键盘值 SendKeys类的Se ...

  7. AEE加密解密

     from Crypto.Cipher import AESfrom binascii import b2a_hex, a2b_hex class AesHandler(object):    def ...

  8. webuploader项目中多文件上传实例

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. javase(12)_集合框架_Queue

    一.Queue Queye接口体系图 体系分析: Deque实现类:ArrayDeque, LinkedList(数组和链表实现双向队列) BlockingDeque实现类:LinkedBlockin ...

  10. ios之UITabelViewCell的自定义(代码实现)

    在用到UITableVIew的时候,经常会自定义每行的Cell 在IOS控件UITableView详解中的下面代码修改部分代码就可以实现自定义的Cell了 [cpp] view plaincopy - ...