Skip to content
On this page

06 文本对象

已经学习过如何操作字符、单词和行。那么更复杂的 文本对象 要如何操作呢?比如一对括号里的内容,一些空行间的内容,一对 HTML 标签包裹的内容……

认识文本对象:文本对象是结构化的,可以快速选择。可以把它理解为一个由符号包裹的,或者有一定含义的范围。

实例说明

文本对象描述起来十分抽象,但是举几个例子就明白了,所以先举例,再往下看。

  • viw —— v 按字符选择,i 内部,w 一个单词,快速选中光标所在的单词,比 bve 的好处是不需要回到单词首
  • vi( = vi) = vib 选中小括号内的内容
  • va( 选中包括小括号的内容

文本对象操作语法

  • operator + (内部外部) + 文本对象,operation 比如 d/y/c
  • 可视化模式 + (内部外部)+ 文本对象,v 其实也算 operation,但是由于可视模式可以看到范围是否选择正确,故单独拿出来强调
  • 内部 i,助记 inner
  • 外部 a,助记 around,all

文本对象

  • ()b:一对 ()
  • {}B :一对 {}
  • [] :一对 []
  • <> :一对 <>
  • t :tag (HTML 或 XML)标签
  • '' :一对 ''
  • "" :一对 ""
  • 反引号 `,ES6 中模板字符串经常用到
  • w :一个单词
  • s :一个句子;以 . ! ? 结尾即为一个句子
  • p :一个段落;有换行符间隔即为一个段落

vscodevim默认开启的插件

vim-textobj-arguments

快速修改或删除函数参数(当光标在函数参数的小括号中)

  • ia 不包含分隔符逗号 ,,修改一个参数 cia
  • aa 包含分隔符逗号 , ,删除一个参数 daa
js
swap(heap, i, j, abc, d|ef) { // | 表示光标的示意位置
  ...
}
// daa 之后会变为
swap(heap, i, j, abc) // normal 模式
// cia 之后会变为
swap(heap, i, j, |)	// insert 模式

vim-textobj-entire

对文件整体进行操作,不常用

  • ae 文本所有内容
  • ie 文本所有内容,但是不包括前后的空格

vae 选中文本的所有内容。

实例练习

js
console.log("This is not a corrent MinHeap!");		// di" 
console.log("");
console.log(`This is not a corrent MinHeap!`);		// da`
console.log();

HTML 元素的操作

html
<div>
  hhhhhhhhhhh
  iiiiiiiiiii
  ooooooooooooooooo
</div>
执行 dit 后变为
<div>
</div>