V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
banxi1988
V2EX  ›  Vim

[Vim 精粹] :文本对象: 从 1 到 N

  •  1
     
  •   banxi1988 · 2018-10-05 21:17:34 +08:00 · 3509 次点击
    这是一个创建于 2265 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Vim 精粹开篇词

    一直以来想写一个关于 Vim 精粹的文章。 但是本系统文章并不是入门指引,而是精粹总结。 同时本系列文章主要参考自《 Vim 实用技巧》一书。

    文本对象: 从 1 到 N

    以前我的编辑对象主要是 字符。 当打错一个单词,我们有两种选择。 1 )狂按退格键,以删除输入的单词。 2 )用鼠标选中要删除单词,然后删除。

    不管第一种选择还是第二种选择都不够优雅。导致这种问题的根本原因是,我们编辑对象的基本元素是 字符. 为了扩大编辑对象的范围,我们不得不求助于鼠标。而使用鼠标,则意味着中断放在键盘上的右手。选中要编辑的范围然后再操作。

    文本对象

    基本文本对象

    Vim 之所以能极大的提高编辑效率,基本一点就是因为 Vim 的编辑的基本元素不仅仅是 字符 ,而是文本对象。当然字符也是一个文本对象。 Vim 中文本对象,正是我们一般所认为的文本元素的划分。也就是如下文本块。

    • wword 单词([a-zA-Z0-9_])
    • WWORD 字串(以空格分隔)
    • ssentence 句子
    • pparagraph 段落

    面向程序员的文本对象

    Vim 提供了基于代码块的文本对象。主要是以匹配如下符号对 (){}、[]<><tagname></tagname>` 的文本对象。

    • () 圆括号代码块,显然对于编辑函数的参数,无论形参还是实参都很有用。
    • {} 用于编辑 C 系风格的代码块,非常合适。
    • [] 用于编辑数组或列表中的元素,非常合适。
    • <> 用于编辑比如 C++,Java 等的模板或者泛型参数,是非常合适。或者编辑 XML ( HTML ) 开始标签。
    • <tagName></tagName> 显然是用来编辑 XML ( HTML ) 标签的。此文本对象以字符 t 表示。

    文本对象的里和外。

    <tagName></tagName> 文本对象为例。

    <blockquote> Vim is the *光标* best editor</blockquote>
    

    当我们的光标在 <blockquote> 元素块的中间时,我们想删除元素块的内容。我们可以使用,

    • it 表示 <tagName></tagName> 文本块里面包含的内容。即 Vim is the best editor
    • at 表示 `整个文本块. 即
      <blockquote> Vim is the best editor</blockquote>
      

    其中 i 可以理解为 inside, a 可以理解为 aroundall

    而对于基本的文本对象来说,比如

    • aw 表示当前单词及后面的一个空格。
    • aW 表示当前字串及后面的一个空格。
    • as 表示当前句子及后面的一个空格。
    • ap 表示当前的段落及后面的一个空行。
    7 条回复    2018-12-25 08:34:37 +08:00
    shuperjolly
        1
    shuperjolly  
       2018-10-06 08:18:17 +08:00 via iPhone
    收藏先,养肥了看
    qinfensky
        2
    qinfensky  
       2018-10-06 08:19:05 +08:00
    目前在使用 VSCode,有什么优点能吸引人切换到 Vim 吗?对这个的了解不多。
    banxi1988
        3
    banxi1988  
    OP
       2018-10-06 08:21:56 +08:00   ❤️ 1
    @qinfensky 事实上我也是用 VS Code 的。VS Code 上用 Vim 插件即可。
    所以我这里的 Vim 主要是指其背后代表的一种高效的编辑方式,逻辑思想,或者说思想。
    Vim 编辑思想,嗯。
    iwfan
        4
    iwfan  
       2018-10-06 09:01:02 +08:00 via iPhone
    写的很好,收藏了。什么时候讲讲寄存器 呢。
    yujincheng08
        5
    yujincheng08  
       2018-10-06 11:45:49 +08:00 via Android
    马克
    feelinglucky
        6
    feelinglucky  
       2018-10-06 22:52:23 +08:00
    搞个 github 的项目呗,一起写
    nG29DOMuRYTWfcSr
        7
    nG29DOMuRYTWfcSr  
       2018-12-25 08:34:37 +08:00 via Android
    收藏一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3771 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:25 · PVG 18:25 · LAX 02:25 · JFK 05:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.