Maoyl's blog Maoyl's blog
首页
  • 前端基础

    • HTML
    • CSS
    • CSS动画
    • JavaScript文章
    • stylus
  • 性能优化

    • 《性能优化》笔记
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《JavaScript设计模式》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架

    • Vue相关
    • React相关
  • 前端监控

    • 前端监控简介
  • 学习笔记

    • 《Vue》笔记
    • 《React》笔记
    • 小程序学习笔记
  • 后端基础

    • Nodejs
  • 学习笔记

    • 数据结构
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网页性能
  • 学习笔记

    • 《Git》学习笔记
    • 《Vim》学习笔记
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

maoyln

日日行,不怕千万里
首页
  • 前端基础

    • HTML
    • CSS
    • CSS动画
    • JavaScript文章
    • stylus
  • 性能优化

    • 《性能优化》笔记
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《JavaScript设计模式》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架

    • Vue相关
    • React相关
  • 前端监控

    • 前端监控简介
  • 学习笔记

    • 《Vue》笔记
    • 《React》笔记
    • 小程序学习笔记
  • 后端基础

    • Nodejs
  • 学习笔记

    • 数据结构
  • 技术文档
  • GitHub技巧
  • 博客搭建
  • 网页性能
  • 学习笔记

    • 《Git》学习笔记
    • 《Vim》学习笔记
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
  • 网站
  • 资源
  • Vue资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 简介

  • vim

    • 起步
    • 相关命令的知识
    • 认识vim语法
    • 删改重做命令提升效率
    • 认识可视化模式
    • 什么是文本对象
      • 文本对象
      • 语法结构
      • 对象
      • 组合举例
      • vim-textobj-arguments & vim-textobj-entire
      • 小练习
    • 快速移动
    • 掌握搜索命令
    • vim-easymotion
    • 数字与'.'的威力
    • 多文件跳转
    • vim-surround
    • 字符替换和多文本选中
    • 大小写、注释与提示
    • 窗口管理大法
    • 快速删除一个函数
    • vim的宏操作
    • 调用vscode命令
  • vscode

  • 《Vim》学习笔记
  • vim
maoyln
2022-06-10
目录

什么是文本对象

# 继续深入:什么是文本对象?

在前面的训练中,我们学习了(比较)快速的删除 X S,以及选中文本 v 等指令,但在日常更多的使用中,我们常常是需要

  • 删除某些多余的变量
  • 复制某个单词
  • 删除被特定符号中包裹的某些内容,如 () {} [] 这些符号
  • 删除一段内容
  • ...等等等等

这时候之前的指令明显就不够用了。那就需要来认真认识一下 vim 的文本对象了。

# 文本对象

在 vim 中,文本是结构化的存在,即 文本对象(text—object);而 vim 对于文本对象,专门有一部分语法,用于快速对文本对象进行编辑操作。

# 语法结构

文本对象的操作语法:operater + 范围(内 / 外)+ 文本对象

  • 内部:i ,意指 inner
  • 外部:a ,英文单词 a,一个的意思

可能看到这里,你会有点迷糊,没关系,我们下面会举例说明。

# 对象

vim 中的文本对象主要有这一些:

  • ( 或 ) :一对 ()
  • b :一对 ()
  • { 或 } :一对 {}
  • B :一对 {}
  • [ 或 ] :一对 []
  • < 或 > :一对 <>
  • t :tag (HTML 或 XML)标签
  • ' 或 ' :一对 ''
  • " 或 " :一对 ""
  • ` 或 ` :一对 ``
  • w :一个单词
  • s :一个句子;以 . ! ? 结尾即为一个句子
  • p :一个段落;以一个换行符间隔即为一个段落

# 组合举例

看了列举出来的文本对象后,可能你会更迷糊,那我们可以先来举个例子:

  • viw:v 是指选中, i 指内部, w 指一个单词,这个指令可以快速选中光标所在的单词,无论光标是在单词的前中后,都可以起效
  • vi(:( 指一个中括号,如果光标在一对括号里面,这个指令可以快速选中括号的内部内容(不包括括号本身),如 ('test') 中的 'test';同样的,vi) 或 vib 也是一样的效果
  • va(: 这个指令也可以选中括号内部的内容,并且会把括号本身也选中,如这 ('test') 中使用这个指令,则会选中 ('test');这就是前面 a 被解释为外部的原因

相信看完这个例子,你应该大概能明白文本对象的使用方式了;对了,以上的 v 也可以换成 d c等操作符;这样下来,日常的使用中就更丝滑了!

# vim-textobj-arguments & vim-textobj-entire

在开始让你练习前,再提多一个内容:vim-textobj-arguments 与 vim-textobj-entire: 这是两个 vim 的插件,额外提供了两个文本对象 a 和 e,使用方式和上面提到的一样;a 具体的功能如下:

// Examples:
// 删除一个参数
function(arg1,    ch)  // 在第二个参数(即 “    ch”)中输入 daa
function(arg1|) // 就会变成这样,| 代表这时光标所在位置;如果这时再输入 daa
function(|) // 就会变成这样

// 修改一个参数
function(arg1,    ch) // 在第二个参数(即 “    ch”)中输入 cia
function(arg1,    |) // 就会变成这样,| 代表这时光标所在位置
1
2
3
4
5
6
7
8
9

以上可以看到在 文本对象 a 中,在他的前面接上表示范围的指令 a 和 i 时,它们的区别是是否包括前面的空格和符号(即当前参数外的内容)。所以规则如下:

  • ia:不包含分隔符
  • aa:包含分隔符

e 在这里代表 entire ,即所有的意思;顾名思义,会针对当前文件所有内容左操作;规则如下:

  • ae:当前文本所有内容
  • ie:当前文本所有内容,但不包括前面和后面的 blank 字符

所以当我们要选中当前文件所有内容时,就可以直接用 vie ,其他删除复制也如此类推。

# 小练习

把以下被符号包裹的内容复制到符号外

'single quotation mark'
"double quotation mark"
[square bracket]
{curly bracket}
<angel bracket>
`backquote`
```
1
2
3
4
5
6
编辑 (opens new window)
#Vim
上次更新: 2025/04/18, 01:42:12
认识可视化模式
快速移动

← 认识可视化模式 快速移动→

最近更新
01
GSAP动画库——如何高效写动画
04-17
02
自适应方案PxToRem
09-10
03
性能优化-requestAnimationFrame
08-10
更多文章>
Theme by Vdoing | Copyright © 2019-2025 备案号:京ICP备19058102号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式