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>