Henry Henry
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)

Henry

小学生中的前端大佬
  • JavaScript
  • TypeScript
  • Vue
  • ElementUI
  • React
  • HTML
  • CSS
  • 技术文档
  • GitHub 技巧
  • Nodejs
  • Chrome
  • VSCode
  • Other
  • Mac
  • Windows
  • Linux
  • Vim
  • VSCode
  • Chrome
  • iTerm
  • Mac
  • Obsidian
  • lazygit
  • Vim 技巧
  • 分类
  • 标签
  • 归档
  • 网站
  • 资源
  • Vue 资源
GitHub (opens new window)
  • 说明
  • Vim

    • 环境准备
    • vim normal 模式中文输入法切换问题
    • vim-01-存活下来
    • vim-02-掌握行相关的命令
    • vim-03-掌握 vim 的语法
    • vim-04-更有效率的处理单字符&undo&redo
    • vim-复习 -1
    • vim-05-掌握可视化模式
    • vim-06-文本对象
      • 任务点
        • 认识文本对象
        • 语法
        • 内/外部
        • 对象
        • vim-textobj-arguments(选择函数参数/数组元素/对象属性):
        • vim-textobj-entire:
      • 社群讨论
    • vim-07-在单文件中移动的更快
    • vim-08-掌握搜索命令
    • vim-复习 -2
    • vim-09-更高效的移动 - 想去哪里就去哪里
    • vim-10-认识数字&点的威力
    • vim-11-掌握多文件之间的跳转
    • vim-12-处理包裹字符的符号
    • vim-复习 -3
    • vim-13-替换字符
    • vim-14-掌握悬浮显示&大小写&注释
    • vim-15-掌握窗口的管理
    • vim-16-删除函数
    • vim-复习 -4
    • vim-17-掌握宏
    • vim-18-调用 vscode 的命令
    • vim-复习 -5
  • VSCode

  • Chrome

  • iTerm

  • mac

  • Obsidian

  • lazygit

  • 学习双拼
  • Vim 技巧

  • 键盘侠
  • Vim
Henry
2022-06-07
目录

vim-06-文本对象

# 任务点

# 认识文本对象

文本是结构化的,可以快速选择,大白话就是范围

# 语法

  • operator + 内/外部 + 文本对象
  • 可视化模式 + 内/外部 + 文本对象

# 内/外部

  • i: 内部
  • a: 外部

# 对象

  • w: 一个单词。内部:单词本身,外部:单词本身 + 左右空格,优先右空格
  • W: 一个字串。内部:字串本身,外部:字串本身 + 左右空格,优先右空格
  • (/)/b: 一对 ()。内部:括号内部,外部:括号及括号内部
  • [/]: 一对 []。内外部同 ()
  • {/}/B: 一对{}。内外部同 ()
  • </>: 一对<>。内外部同 (),操作 html 标签
  • t: html 文本。
  • ': 一对单引号。内外部同 ()
  • ": 一对双引号。内外部同 ()
  • `: 一对反引号。内外部同 ()
  • s: 一个句子,以 .!? 结尾
  • p: 一个段落,以空行分隔,内部选中该段落,外部还会选中下面的空行

下表总结了部分 Vim 内置的分隔符文本对象。出于整洁起见,表中省略了一些重复的文本对象。例如,i( 和 i) 等同,a[ 和 a] 也相同,你可以使用最适合自己的那种风格。

使用可视模式展示部分文本对象:

下表总结了部分 Vim 内置的范围文本对象。

让我们比较一下 iw 及 aw 文本对象。按之前说过的记忆方式,可以分别把它们解读为操作单词内部(inside the word)或单词周围(around the word)。不过这究竟代表着什么呢?

iw 文本对象包含当前单词从第一个到最后一个字符间的全部内容,aw 文本对象也是一样,但它的范围有所扩大,它会额外包含该单词前面或后面的一个空白字符(假如该处有空白字符的话)。

iw 和 aw 之间的区别很微妙,为什么会需要这样两个文本对象呢?乍一看不是很明了。因此,让我们先看一下二者的典型应用。

假设,我们想删除下句中的单词“excellent”,此时可以用 daw 命令:

这条命令会删除此单词,外加一个空格,因此结果会很干净。如果我们用的是 diw 的话,那删完后就会有两个连在一起的空格,这或许并不是我们想要的。

现在假设我们是想把此单词改成另外一个单词,这次可以用 ciw 命令:

ciw 命令只删除该单词,而不删除其前后的空白字符,随后它会进入插入模式,这刚好是我们想要的效果。如果用的是 caw 的话,那最后两个单词就会连在一起,变成“mostadjectives”。虽然这很容易修正,但如果一开始就能避免此问题,那岂不是更好么。

一般来说,d{motion} 命令和 aw、as 和 ap 配合起来使用比较好,而 c{motion}命令和 iw 及类似的文本对象一起用效果会更好。

对于引号来说,只要当前行光标后面有引号就可以操作引号中的内容

比如 name: 'xxx',光标在 n 上,执行 vi' 就可以选中 xxx,同理,c/d/y 都可以

# vim-textobj-arguments(选择函数参数/数组元素/对象属性):

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

技巧:

  • cia: 修改一个参数
  • daa: 删除一个参数

默认删除 (/[ 里以 , 分割的字符,所以可以选择函数参数或数组元素

我们可以增加 { 来使其可以选择对象属性

"vim.argumentObjectOpeningDelimiters": [
  "(",
  "[",
  "{"
],
"vim.argumentObjectClosingDelimiters": [
  ")",
  "]",
  "}"
]
1
2
3
4
5
6
7
8
9
10

# vim-textobj-entire:

  • ae: 当前文本所有内容
  • ie: 当前文本所有内容,不包含前后空格

# 社群讨论

我有个问题,如果在 vim 中需要复制到系统的黏贴版,是不是要用 command + c,而不是用 y

对,y 是复制到 vim 的寄存器里了;记得视频里给大家演示了 这样的话有 2 个剪切板非常的舒服。当然 vim 本身有非常多的寄存器 但是我不是太喜欢用 太麻烦,2 个剪切板日常够用了

我看了那个视频,但是感觉很麻烦,感觉系统的剪切板用的方便

可以设置 vim 用系统剪贴板:"vim.useSystemClipboard": true,

设置之后,y 是进入系统剪切板么

对,就是你在微信 copy 也能粘贴

eee

确实是打通了 但是少了一个剪切板


想问一下有遇到过 vscode vim key repeating 在编辑区没生效的问题吗?侧边栏倒是生效了

在编辑区?normal 模式也不生效?重启试试


我把 </Row> 剪贴后 怎么在 {data} 那行粘贴到 {data} 下面一行呢,假设 {data} 下面那行有数据 是新起一行

没太看懂 在 {data} 那里按 o

就是有快捷的办法把结束标签放到 61 行不

第一步是 da< 第二步粘贴

我只能做到这样,不然还得进入 inset 模式按回车

只能这样操作

好吧 我还以为有我不知道的命令

这个提示是啥插件 hhh

error lens


打开了两个相同的 vscode ,请问怎么相互快速切换呢。manico 貌似只能在不同应用间切换

command + `

貌似没有反应,是要第三方软件驱动嘛

开 2 个 vscode 窗口

测试了下,全屏无效,开两个小窗有效。

对 不全屏,你可以放到最大鸭

啊,我一直都全屏

那你用 control + 左右切换系统的

不错结合 manico 确实可以做到不全屏了,感谢感谢


当标签换行后,vit 会把开始标签的 > 选中

VS Code vim 插件的 bug


请问下这里的动作范围是不是不对,是不是应该是 daw 跟 ciw

w 是单词 这里的 a 是参数

我 vscode 打了没反应,就光标闪了一下

这个是作用于方法的参数的,在别的地方不生效


崔大,之前答疑那堂课讲到的,解决 windows ctrl+c 等会导致回到 normal 模式,然后通过设置 settings.json 的 vim.handlekeys 解决,那如果需要用到 visual block,按 ctrl + v 的话,又会变成粘贴,进不去 visual block 模式,是不是会有这种情况

现在你是遇到了这个情况了吗?

是滴,不过我原本就已经配置了 vim.useCtrlKeys 为 true,handleKeys 配了 C-a,C-c,C-v,C-f。原来如此,我把 handleKeys 指定的 C-v 配成 true 就可以了,另外的不启动的之前默认粘贴过来都是 false,比如 Ctrl+f 查找,c 复制,a 全选等

我看看你现在的配置是啥

这是阉割版,我在家里 windows 电脑从零用到啥配啥的,不过看目前讲到的第六课,是够用的

编辑 (opens new window)
#Vim
上次更新: 5/27/2023, 1:02:05 PM
vim-05-掌握可视化模式
vim-07-在单文件中移动的更快

← vim-05-掌握可视化模式 vim-07-在单文件中移动的更快→

最近更新
01
version 1.15
07-01
02
version 1.14
06-27
03
version 1.13
06-27
更多文章>
Theme by Vdoing | Copyright © 2017-2023 HenryTSZ | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式