技巧21 选择高亮选区

vim有三种可视模式,在面向字符的可视模式中,我们能够选择任意的字符范围.不论它是单个字符,还是位于一行内,或是跨若干行的指定字符范围.都没问题.该模式适用于操作单词或短语.如果我们想对整行进行操作,我们可以改用面向行的可视模式.而面向列块的可视模式则允许我们对文档的列块进行操作.列块可视模式非常特别.

激活可视模式

v键是通往可视模式的大门. 按v可以激活面向字符的可视模式.
按V(v和shift 一起按)可以激活面向行的可视模式,而按(v和Ctrl 一起按)则可以激活面向列块的可视模式.

参见下表中的汇总:
命令 用途
v 激活面向字符的可视模式
V 激活面向行的可视模式
<C-v> 激活面向列块的可视模式
gv 重选上次的高亮选取

gv命令是一个有用的快捷键,它用来重选上次由可视模式所选择的文本范围.不管上个选区是面向字符的,面向行的,或是面向列块的,gv命令总能正确地工作.如果上次的选取被删除了,它也许会工作的不太正常.

在可视模式间切换
如果当前在面向字符的可视模式,我们可以按V来切换面向行的可视模式,或是<C-v>来切换到面向列块的可视模式.然而,如果在面向字符的可视模式中再次按v,就会回到普通模式.所有你可以把v键当成普通模式及面向字符的可视模式间的转换开关.V及<C-v>键也一样可以在普通模式及其对应的可视模式间切换.当然了,你总是可以按<Esc>

技巧22 重复执行面向行的可视命令

当使用.命令重复对高亮选取所做的修改时,此修改会重复作用于相同范围的文本.在本节中,我们会对一个面向行的高亮选取做一个修改,然后使用.命令重复此修改.

在可视模式中执行完一条命令后,我们就返回普通模式,并且在可视模式中选中的文本范围也不再高亮显示了.那么,如果我们想对相同范围的文本执行另外一条可视模式命令,该怎么办?

举例:
def fib(n):
a,b = 0,1
while a < n:
print a,
a,b = b,a+b
fib(42)

这段代码的每级缩进使用4个空格.
首先需要对vim进行配置.使之符合此缩进风格.

准备工作.要想让< 和 > 命令正常工作,我们需要把”shiftwidth” 及 “softtabstop” 的值设置为4,并启用”expandtab”选项.下面的一行命令会完成上述设置:
set shiftwidth=4 softtabstop=4 expandtab

先缩进一次,然后重复
在这段错误的python代码中,while关键字下面的两行应该多缩进两级.我们可以高亮选择这两行.然后用>命令来对它进行缩进.以修正其缩进错误.

要解决这个问题,一个办法是使用gv命令重选相同的文本,然后再次调用缩进命令,然而,如果你已经对vim解决问题的方式有所领悟,你的脑海中应该会敲响警钟.

当需要执行重复操作时, .命令是最佳的解决方案,与其手动重选相同范围的文本并执行相同的命令,倒不如直接在普通模式里按.键.下面是具体的操作:

举例:
def fib(n):
a,b = 0,1
while a < n:
print a,
a,b = b,a+b
fib(42)

>.  先缩进一下,用.再缩进一下

在使用.命令重复一条可视模式命令时,它所操作的文本数量和上次被高亮选中的文本数量相同.对于面向行的高亮选取来说,这种做法往往符合我们的需要.但是对于面向字符的高亮选区来说,这却会产生令人意外的结果,接下来通过一个例子来说明一下.

技巧23.只要可能,最好用操作符命令,而不是可视命令

举例:

<a href="#">one</a>
<a href="#">two</a>
<a href="#">three</a>

我们可以用vit来选择标签里的内容,vit可以被解读为高亮选中标签内部的内容,其中,it命令是一种被称为文本对象(text object)的特殊动作命令.

vit
U
j.
j.

上面的命令,执行到最后一个的时候,我们发现当一条可视模式命令被重复执行时,它会影响相同数量的文本.在本例中,最初的命令影响了一个由三个字母组成的单词.第二行它依旧工作得很好,因为该行恰好也包含一个由三个字母组成的单词.但是,当我们想对一个由5个字母组成的单词重复此命令时,它只成功转换了其中的3个字母,留下2个字母未被转换.

使用普通模式下的操作符命令

<a href="#">one</a>
<a href="#">two</a>
<a href="#">three</a>

可视模式下的U命令有一个等效的普通模式命令.gU{motion}

gUit
j.
j.

这两种方式都只需要四种按键操作,vitU,gUit,但其背后的含义却大相径庭.在可视模式所采用的方式里,这四个按键可以被当做两个独立的命令,vit用来选中选区,而U用来对选区进行转换,与之相反的是,gUit命令可以被当成是一个单独的命令,它由一个操作符(gU)和一个动作命令(it)组成.

技巧24 用面向列块的可视模式编辑表格数据

在任何编辑器中,我们都可以操作以行为单位的文本,但以列为单位进行文本操作就需要更为专业的工具了.vim面向列块的可视模式就提供了这种能力.我们可以用它来对纯文本表格进行转换.

举例:
visual_model/chapter-table.txt

chapter Page
Normal mode 15
Insert mode 31
Visual mode 44

<C-v>3j

x...
gv
r|
yyp
Vr-

一开始,我们先使用进入列块可视模式,然后向下移动光标,选中一列文本,然后按x删除此列,并用.命令重复删除相同范围的文本,多重复几次直到距右边差不多有两列的距离.

我们也可以不用.命令,而是把光标向右移动两三次,把列选区扩展为块选区,然后只需要删除一次即可.

现在,我们已经把所需的两列文本排列到了合适的位置,接下来就可以在这两列文本中画一条竖线了,我们先用gv命令重选上次的高亮选区,然后输入r|,用管道符替换此选区内的字符.

到了这一步,我们或许也想画一条横线来分割表头以及其下的内容,我们先快速地复制顶行并粘贴一份副本(yyp),然后再用字符替换行内的所有字符(Vr-)

技巧25 修改列文本

用列块可视模式可以同时朝若干行中插入文本,列块可视模式不仅仅对表格数据有用,在编程的时候,我们也受惠于此功能.

visual_model/sprite.cssli.one a{background-image: url("/images/sprite.png");}
li.two a{background-image: url("/images/sprite.png");}
li.three a{background-image: url("/images/sprite.png");}

假设我们已经把文件从sprite.png从images/目录移到了components/目录,那么就需要修改每一行的内容,使其指向该文件的新位置.我们可以使用列块可视模式完成此工作.

操作.

<C-v>jje  选中images
c        进入插入模式 Insert mode
components  Insert mode
<Esc>

Normal mode

这样就能完成多个地方的输入了.

vim实用技巧读书笔记(5)相关推荐

  1. vim实用技巧-笔记(第九章)

    vim实用技巧-笔记(第九章) 前言 我记得很早以前我就说过了,我是一个菜鸟,我写博客的主要目的不是为了别人,更多的是为了记录自己的成长过程.如果阁下认为我的行为是在划水的话,那我也不妨大方地承认. ...

  2. 《Vim实用技巧(第2版)》学习笔记:技巧12-双剑合璧,天下无敌

    <Vim实用技巧(第2版)>学习笔记:技巧12-双剑合璧,天下无敌 1. 操作符 + 动作命令 = 操作 d{motion}命令可以对一个字符.一个完整单词或一整个段落进行操作,它作用的范 ...

  3. 重构(Refactoring)技巧读书笔记 之二

    重构(Refactoring)技巧读书笔记 之二<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...

  4. 重构(Refactoring)技巧读书笔记 之三

    重构(Refactoring)技巧读书笔记 之三<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:of ...

  5. 《Vim实用技巧(第2版)》——1.4 执行、重复、回退

    本节书摘来自异步社区<Vim实用技巧(第2版)>一书中的第1章,第1.4节,作者:[英]Drew Neil(尼尔)著,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  6. Vim实用技巧高清完整版PDF中文

    Vim实用技巧高清完整版PDF是一本中文版的参考教材,该书适合想要学习和掌握 Vim 工具的读者阅读,有一定 Vim 使用经验的程序员,也可以参考查阅以解决特定的问题. 欢迎大家下载阅读学习:http ...

  7. vim实用技巧(第二版)........持续更新ing

    全书共123个技巧,每天更新两个,计划两个月更新完. (目前更新完技巧39) vim实用技巧第二版全部教学内容 前言 第1章 Vim解决问题的方式  技巧1 认识 . 命令  技巧2 不要自我重复   ...

  8. Vim实用技巧_2.普通模式和插入模式

    下面介绍vim的几种常用模式的技巧 vim有4种模式:普通模式,插入模式,可视模式,命令模式 为什么要分这么多模式? 想一想我们平时常用的编辑工具word,应该是将上面4种模式融合在一起的:这种做法的 ...

  9. Vim实用技巧:global命令

    :global命令结合了Ex命令与Vim的模式匹配这两方面能力.凭借该命令,可以在某个指定模式的所有匹配行上运行Ex命令.就处理重复工作的效率而言,global 命令是除点范式以及宏之外,最为强大的V ...

最新文章

  1. 学好web前端开发要注意哪些问题
  2. android画布,android-视图在画布比例上不适合画布
  3. vue 设置代理报错;occurred while trying to proxy request xxx
  4. (转)《AS3 Expert》动态语言的基石:函数闭包
  5. 原博客文章(Apache初配2008/4/8)
  6. MaxCompute JOIN优化小结
  7. php面向对象精要(1)
  8. [数据]matplotlib总结
  9. 云原生是什么?它从哪里来?又到哪里去?
  10. [转]从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法
  11. 手把手教你申请Coursera的课程助学金
  12. svn中文语言安装包使用
  13. 计算机管理员怎么开通,管理员权限怎么设置
  14. 跨时区时间运算以及时间实时更新方法
  15. 如何使用Windows Live Writer远程发布到WordPress
  16. P7714「EZEC-10」排列排序 题解
  17. anchors.fill和anchors.centerIn区别
  18. javaScript 美化上传文件框
  19. Android 11.0 系统Settings app详情页增加统计使用时长功能
  20. 立象Argox iX6-250打印机驱动 v2019.1 官方版

热门文章

  1. mysql启组提交 阿里_[图解MySQL]MySQL组提交(group commit)-阿里云开发者社区
  2. 蓝牙核心规范(V5.2)7.0-深入详解之L2CAP(1)(五星推荐☆☆☆☆☆)
  3. ArkUI-1.OpenHarmony开发语言简介
  4. 《惢客创业日记》2020.06.26-27(周五) 无欲则刚?还是有欲则刚?
  5. AWS 云服务各组件之间的关系
  6. Servlet应用——JavaWeb教案(四)
  7. 你不知道的那些高清图片素材网站
  8. 上任新“官”,如何快速建立领导权威?
  9. app接入微信第三方支付详解以及坑
  10. Android 弹窗设计规范