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不包含分隔符逗号,,修改一个参数ciaaa包含分隔符逗号,,删除一个参数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>