Vim 文本对象指南 (1)

本文还是介绍一些基本内容, 关于插件使用, 可以查看完整配置 space-vim.


如果想要在 Vim 里拥有高效编辑的能力, 必然要掌握超过单个字符编辑的能力, 不然就可能出现像之前看到过的一个笑话 :

在你刚开始使用 Vim 的时候做过什么令你 “难忘” 的事情? 答: 使用
j 跳转到 5000 行 :).

也就是说, 要掌握词 (word), 句子 (sentense), 段落 (paragraph) 级别的编辑能力. 在 Vim 里, 这样的概念叫做 文本对象 (text objects) . 详见 Vim 的 help :h text-objects. 另外, 这些概念对于只是对英文表现比较好, 因为英文可以按照空格划分词, 但是中文并不可以.

本文的内容实际很多来自 Vim 的 help. 如果开始知道不懂的时候去查看 Vim 的 help, 基本上也就真正知道如何学习 Vim 了.

对于普通文本文件和常见程序语言结构, Vim 都提供了文本对象. 你可以通过 Vim script 定义新的文本对象.

一个编辑命令的结构

在 Vim 中, 编辑命令 (editing commands) 有着如下的结构:

<number> <operator> <text object or motion>

<数字> <操作符> <文本对象或移动命令>

number: 数字用于在文本对象或移动操作上进行多次执行, 比如说, 向后 3 个单词, 向前 2 个段落. 数字是可选的, 可以出现命令(command) 的前面,也可以放在命令的后面.

If the motion includes a count and the operator also had a count before it, the two counts are multiplied. For example: "2d3w" deletes six words.

如果是 motion 和下面所提到的 operator 都有数字修饰, 那么效果是两个数字相乘. 比如, 2d3w 是删除 6 个单词.

operator: 操作符, 比如, change, delete (删除), yank (复制). 操作符也是可选的. 但是如果没有操作符的话, 那么就只剩一个移动命令, 而非一个编辑命令了.

:h operator, Vim 默认提供的 operator 有:

operator

text object 或者 motion 可以是一个文本对象, 比如, 一个单词, 一个句子, 一个段落, 或者是一个移动, 比如, 向下移动一行, 向后翻一页, 到一行末尾.

:h text-objects :

text-objects

:h motion :

motion

一个编辑命令(editing command) 等于一个操作符加上一个文本对象或者移动, 比如, 删除一个单词, 改变一个句子, 复制一个段落.

an editing command = an operator + a text object/motion

普通文本对象

Vim 为普通文本文件提供了三种类型的文本对象: 词(word), 句子(sentence), 段落(paragraph).

  • aw - a word (包含在周围的空格)
  • iw - inner word (包括周围的空格)
Lorem ipsum dolor sit amet...

daw

Lorem dolor sit amet...

a 开头的文本对象包含周围的空格, 以 i 开头的文本对象不包含. 这个原则对所有的文本对象都适用.

w 看起来与 aw 效果差不多. 区别在于光标位置. 比如, 如果用 dw 来删除一个词, 光标必须在词的开头. 如果在除了开头的其他位置使用 dw, 只能删除部分单词. 但是, daw 允许光标在一个词的任何位置删除整个单词.

w & aw

如果你已经懂得了 word 的 w 与 aw 的区别, 下面句子与段落就已经掌握了, 道理是一样的, 只是将 w 换成了 s 与 p.

句子

  • as -- a sentence
  • is -- inner sentence
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

cis

 Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
nisi ut aliquip ex ea commodo consequat.

注意, "inner" 文本对象不包含尾部的空格.

段落

  • ap -- a paragraph
  • ip -- inner paragraph
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis 
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.

dap

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.

移动命令 vs. 文本对象命令

  • 一个使用移动的命令, 比如, cw, 是从光标处开始生效.
  • 一个使用文本对象的命令, 比如, ciw, 如果光标在何处, Vim 都将在整个文本对象上生效.

是一个移动命令还是一个文本对象命令, 区别在于是否有 a (around) 或者 i (inner) 这样的限制. 对于每个类型的文本对象都是如此. 尽管使用文本对象的方式需要多输入一个字符, 但是这可以节省你的时间将光标移动到 "正确" 的位置.

参考:
[1] Vim Text Objects: The Definitive Guide

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • 下面是一篇旧文,大多是一些已有知识的整理,并不太成熟。欢迎关注专栏 space-vim , 有空我会以 Vim 自...
    liuchengxu阅读 637评论 0 8
  • 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 启动vim 在命令...
    im蚂蚁阅读 30,746评论 3 48
  • vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v 从...
    壹首簡單的歌阅读 881评论 0 7
  • 应读者要求,图片已更新,更清楚了撒 第一讲 第一讲小结 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl...
    Gaolex阅读 3,980评论 18 153
  • 一.首先我们用 imageView 加载类似上面的动态图 直接上代码截图: 二.利用 webView 加载上面的动...
    goodthing阅读 1,982评论 0 2