第一部分模式

第2章  普通模式
打开vim的默认状态即为普通模式   普通模式的命令强大  很大程度源于可以把操作符与动作命令结合在一起
技巧7 停顿时请移开画笔
 

工欲善其事,必先利其器   准备工作必不可少

技巧8   把撤销单元切成块

u键 会除法撤销命令,它会撤销最新的修改  一次修改可以是改变文档内文本的任意操作,其中包括在普通模式,可视模式以及命令行模式中所触发的命令,也包括在插入模式中输入或删除的文本

i <ESC>   是一次修改

不同的文本编辑器   有不同的撤销粒度   一种是它可能会撤销最后输入的字符,另一种可能会把字符分成块,使每次撤销操作删除一个单词而不是一个字符。

在vim中我们自己可以控制撤销命令的粒度,从进入插入模式开始,直到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改,因此,只要我们控制好对<ESC>键的使用,就可使撤销命令作用与单词、句子或段落。

每次的ESC键都控制着u键撤销的单位   也即撤销块

输入文件时  当前光标在行尾,如果想拥有更细的粒度,可以用<ESC>o替换<CR>   即每次撤销涉及的仅限于一行的内容

注意在插入模式中移动上下左右光标键   会产生新的撤销块,可以想象为现切换回普通模式,然后用hjkl命令进行光标的移动  会对.命令产生影响

技巧9  构造可重复的修改       思考用到.的命令构造方式

删除行尾的单词    当前光标位于行尾的单词最后一个字符上

例如  the end is nigh

当前光标位于h上,想要删除nigh

1.反向删除

db                    the end is h                 向前删除一个单词  但是会保留当前光标处的最后一个字符

x                      the end is                     删除上面的h字符

.代表执行x命令  仅仅删除一个字符

2.正向删除

b                      the end is nigh            当前光标位于n处

dw                     the end is                     删除n及所在的单词

.代表   dw       未移动光标   仅仅删除一个单词   无意义

3.删除整个单词

daw                  the  end is                     aw代表一个单词的意思 为一个命令       daw为删除一个单词

.  能够删除一个单词     .=daw          更有意义

 技巧10 用次数做简单的算术运算

<CTRL-a>   和<CTRL-x>     命令分别对数字执行加和减操作

例如  光标在5上     按10<CTRL-a>    值就会变为15     如果当前光标不在数字上   则会在当前字符串中向后搜索数字并定位光标到数字上  再操作

例 .blog {background-position:0px 0px}

要求  复制一行  修改.blog为.news     并将第一个0px中的0改为-180

1.     yyp  复制一行 并粘贴

2. cw.news<ESC> 修改第一个单词 为.news

3. 180<C-x> 0-180=-180

注意:

007数字在vim中被当做8进制 +001=010

如果想让数字全部被当做10进制,需要在vimrc中添加“set nrformats=”

技巧11   能够重复   就别用次数

delete more than one word

方式1: d2w  先删除命令 2w为动作命令 这里的修改是d2w     .=d2w

方式2: 2dw 2次 删除单词 这里的修改是2dw

方式3: dw. 删除单词 用.重复操作 这里的修改是dw

建议  如果要删除数量不多的连续7个单词   可以d7w   也可dw......   6个点

后者更好   粒度细    省略计算个数的时间

使用次数的场景

将i have a couple of questions改为i have some more questions

c3wsome more<ESC>    前提条件将光标移动到a上

用次数的另一个好处是   可以保留一个干净、连贯的撤销历史记录   一次u键就可以撤销整个修改

技巧12 双剑合璧  天下无敌

操作符+动作命令=操作

vim的操作符命令

命令 用途

c 修改

d 删除

y 复制到寄存器

g~ 反转大小写

gu 转换为小写

gU 转换为大写

> 增加缩进

< 减小缩进

= 自动缩进

! 使用外部程序{motion}所跨越的行

d{motion} 命令可以对一个字符dl 一个完整单词 daw 或一整个段落dap     作用范围由动作命令决定

c{motion}

y{motion}

g~ 切换大小写     反转

gu 切换成小写

gU 切换成大写

vim的语法仅有的一条额外规则    当一个操作符命令被连续调用两次时,会作用与当前行

例如 dd删除当前行   >>缩进当前行

扩展命令组合的能量强大

有vim缺省的操作符和动作命令

也有通过自定义动作命令及操作符来进一步扩充其数目

可以通过 :h  :map-operator来查看如何创建自定义的操作符

:h  omap-info来查看如何创建自定义的动作命令

例如commentary.vim插件    textobj-entire插件

操作符待决模式

普通   插入及可视模式很容易辨识      例如在dw时会激活待决模式   通常只持续不到一秒时间     仅仅在d及w键之间的短暂时间间隔内存在。

将vim看成有限状态机    操作符待决模式就是一只接受动作命令的状态    此状态在我们调用操作符时被激活,然后什么也不做,直到我们提供了一个动作命令,完成整个操作。

:h g    :h z    :h ctrl-w   通常头一个按键仅仅是第二个按键的前缀    这些命令不会激活操作符待决模式   相反可以把他们看成命名空间namespace    用来扩充可用命令的数目    只有操作符才会激活操作符待决模式。

vim使用技巧二 模式的更多相关文章

  1. 技巧:Vim 的纵向编辑模式【转】

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 张 曜民 和 卢 丹2011 年 2 月 18 日发布 WeiboGoog ...

  2. 技巧:Vim 的纵向编辑模式

    https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 开始之前 人类大脑对文字的处理是平面式的,所以我们浏览文章.查找资料或者重构代码 ...

  3. 【转载】技巧:Vim 的纵向编辑模式

    如果要我选一个Vim中让我觉得Life Changing功能的话,我一定会选Vim的块编辑功能,也就是Ctrl+V,虽然还有些别的编辑器也有这功能,但目前为止,我从中受益颇大 原文地址:技巧:Vim ...

  4. Vim 常用技巧:

    Vim 常用技巧: 将回车由默认的8个空格改为4个空格: 命令:set sw=4 修改tab为4空格: 命令:set ts=4 设置每一级的缩进长度: 命令:set shiftwidth=4 设置文件 ...

  5. Vim使用技巧汇总

    一 写在开头 1.1 本文内容 Vim使用技巧与学习资源汇总. 二 Vim学习资源 1. Vimtutor 2. Vim中文帮助(http://vimcdoc.sourceforge.net/doc/ ...

  6. Linux系统配置VI或VIM的技巧

    Linux系统配置VI或VIM的技巧作者:IT专家网论坛出处:IT专家网论坛2008-10-28 11:08配置VI和VIM的颜色显示,使它能够高亮度显示一些特别的单词,这对编写程序很有用⋯⋯ 1.V ...

  7. 转载: vim使用技巧

    两篇很牛的vim使用技巧   来源: ChinaUnix博客 日期: 2009.07.06 10:18 (共有条评论) 我要评论   读本文之前请注意:1. 本文的目标是提供一些vim的使用技巧,利用 ...

  8. 《Vim实用技巧》第2版读书笔记

    学习前的建议: 一.如果你需要一个功能强大的文本编辑器,速度飞快.使用方便.代码补全.编程强大.定制性强,Vim就是你需要的: 二.学习入门曲线陡峭,但是使用后期异常简单,效率超高: 三.号称可以跟上 ...

  9. vim gvim技巧大全(9)(转载)

    vim gvim技巧大全(9) 2 用命令}移动到这个段落的底部,标记为b3 输入命令:'a,'b move来移动文本.老版本的Vi编辑器不能很好的来处理多文件.但是Vim在处理多文件上却显得优秀得多 ...

随机推荐

  1. 基于.NET网页开发的工作,需要掌握的知识点

    学习计划对于程序员来说尤为重要,我最近根据自己的职业规划和招聘网站上对于基于.NET网页开发工作所需要的技能做出了一个总结,这个总结的内容也将是自己最近一年的知识补充和学习的方向,各位园友也可以把它作 ...

  2. 事件冒泡之cancelBubble和stoppropagation的区别

    事实上stoppropagation和cancelBubble的作用是一样的,都是用来阻止浏览器默认的事件冒泡行为. 不同之处在于stoppropagation属于W3C标准,试用于Firefox等浏 ...

  3. thinkphp分页集成

    控制器: $User = M('webcase'); //  实例化 User 对象 $list = $User->order('id desc')->page($_GET['p'].', ...

  4. gcc&g++

    原文章 误区一:gcc只能编译c代码,g++只能编译c++代码两者都可以,但是请注意:1.后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序:后缀为.cpp的,两者都会认为是c++程序,注 ...

  5. 大数据freestyle: 共享单车轨迹数据助力城市合理规划自行车道

    编者按:近年来,异军突起的共享单车极大地解决了人们共同面临的“最后一公里”难题,然而,共享单车发展迅猛,自行车道建设却始终没有能够跟上脚步.幸运的是摩拜单车大量的轨迹数据为我们提供了一种新的思路:利用 ...

  6. 正则表达说明—Pattern API

    字符类 [abc]                              匹配a.b.c任意一个字符 [^abc]   匹配除了a.b.c外的任意一个字符 [a-zA-Z]     匹配a-z或A ...

  7. 洛谷 P2264 情书

    题目背景 一封好的情书需要撰写人全身心的投入.lin_toto同学看上了可爱的卡速米想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他. 题目描述 为了帮助lin_toto,我 ...

  8. Cairo Drawing Model

    Cairo Drawing Model Cairo是一个强力的2D绘图库. Destination 是你最终绘图的目标, 可以是一系列Pixel或者绑定到SVG或PDF文件上. Source 是实际在 ...

  9. poj3264 划分树

    题意: 给定一个序列,询问区间中最大数减去最小数的结果 和2104差不多, 代码贴过来就OK了 #include <iostream> #include <algorithm> ...

  10. DAG上的动态规划---嵌套矩形(模板题)

    一.DAG的介绍 Directed Acyclic Graph,简称DAG,即有向无环图,有向说明有方向,无环表示不能直接或间接的指向自己. 摘录:有向无环图的动态规划是学习动态规划的基础,很多问题都 ...