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 语法
        • 操作符
        • 基于单词/字串的移动
        • 组合
      • 社群讨论
    • vim-04-更有效率的处理单字符&undo&redo
    • vim-复习 -1
    • vim-05-掌握可视化模式
    • vim-06-文本对象
    • 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-03
目录

vim-03-掌握 vim 的语法

# 任务点

# vim 语法

操作符(operator)+ 动作(区域范围)

操作符:指删除、复制等操作字符的字符,如上节课所学的 d、y

动作:指可以将当前光标移动到另一位置的字符,如 hjkl, ^$ 等

# 操作符

d: 删除

当按下 d 后,可以在 vscode 下方状态栏看到当前输入到 d,此时 vim 就进入 pending 的状态,等待我们后续输入的动作

当我们输入 操作符 + 动作 后,vim 就会去执行这个命令

比如输入 d + h 就是向左删除一个字符,d + $ 就是删除到行尾

但当我们输入 d + H/L 的时候,却不是删除到行首/尾

这是因为我们改键只改了 normal 模式,而没有改 operatorPending 模式

还是在 settings.json 中增加配置:

"vim.operatorPendingModeKeyBindings": [
  {
    "before": ["H"],
    "after": ["^"]
  },
  {
    "before": ["L"],
    "after": ["g", "_"]
  }
]
1
2
3
4
5
6
7
8
9
10

如果要在终端中改键:

.vimrc

onoremap H ^
onoremap L g_
1
2

onoremap表示在输入完操作后等待时间按键绑定

c: 删除并进入 insert 模式

y: 复制

d/c/y 删除/复制后,都会把字符存储在寄存器中

# 基于单词/字串的移动

单词:字母组成的单词、括号等

一个单词的定义是连续的「数字 + 字母 + 下划线」,或者连续的「特殊字符」。比如 hello, world!!!  里包含  hello、,、world  和  !!!  四个单词。按  w  跳转时,会跳过单词后面的所有空白字符,落在下一个单词的开头。示例:

↓ 光标在这里
Hello, world!
     ↑ 按下 w
    ↑ 按下 e
Hello, world!
       ↑ 按两下 w
     ↑ 按两下 e
1
2
3
4
5
6
7

e: 移动到单词的结尾 (从左到右移动)

w: 移动到单词的开头(从左到右移动)

b: 移动到单词的开头(从右到左移动)

ge: 移动到单词的结尾 (从右到左移动)

我们可以认为这些动作命令是成对出现的。w 和 b 命令都以词首为目标,而 e 和 ge 命令则是以词尾为目标。w 和 e 都正向移动光标,而 b 和 ge 命令则反向移动光标。下图展示了这些面向单词的动作命令的效果:

字串:空格、tab、换行分割的字符,比如  hello, world!!!  里,包含  hello,  和  world!!!  两个字串。

E: 移动到字串的结尾(从左到右移动)

W: 移动到字串的开头(从左到右移动)

B: 移动到字串的开头(从右到左移动)

gE: 移动到字串的结尾 (从右到左移动)

我们经常提到单词,但迄今为止,我们都一直未定义过究竟什么是一个单词。Vim 对此有两种不同的定义,并且分别用“单词”(word)和“字串”(WORD)对其进行区分。我们之前遇到过的每个面向单词的动作命令,都有一个面向字串的命令与其对应,这当中包括 W、B、E 和 gE。

一个单词由字母、数字、下划线,或其他非空白字符的序列组成,单词间以空白字符分隔。而字串的定义则更简单,它由非空白字符序列组成,字串间以空白字符分隔。

我们可以这样简单地想:字串比单词更长!请看下面这段文本,然后快速数一下当中单词的个数:

e.g. we're going too slow

你是不是数到 5 个或 10 个单词(或二者中间的某个值)?上例中包含了 5 个字串及 10 个单词。句号及单引号都被当成了单词,因此,如果我们用 w 命令在这段文本中移动的话,会显得很慢:

 相反,如果我们基于字串移动,用更少的按键就可以达到同样的效果:

 在本例中,面向字串的动作命令似乎是更好的选择,然而这并不是绝对的。因为有时候,我们可能会想把“we”当成一个单词来进行操作。

例如,如果我们想把“we”改成“you”,可以这样做:

 在另外一些时候,我们可能更想把“we’re”当作一个字串来进行处理。例如,如果我们想把它改成“it’s”的话,可以这样做:

 如果你想更快地移动的话,可以用面向字串的动作命令;而如果你想以更细的粒度移动的话,则可以用面向单词的动作命令。你自己试着用一下这些命令,然后就会知道什么时候该用单词,什么时候该用字串了。你可以训练一下自己对这些命令的直觉,用不着理解其实现的细节。

# 组合

cw: 删除当前单词并进入 insert 模式

ea: 在当前单词结尾处添加

# 社群讨论

感觉第三章节讲的灵活性都开始变大了,循序渐进的一个过程也挺有意思的

其实写代码就是最好的练习,因为肌肉记忆有部分是和场景有关系

是的 像操作性的东西大部分就是肌肉记忆,练久了感觉就熟悉了,不过前期确实挺难受

其实就是第一次的痛苦期难熬 劝退了很多人,只要你有一次渡过痛苦期的经验 下一次在遇到痛苦期就心里有数有信心了,比如很多从全拼转到双拼的同学 就非常容易习得,因为他们知道痛苦期只是暂时的


两个问题

d ^: 删除到行首操作会有光标所在的字母没有删除到

c w:删除到下个单词前会保留下个单词前的空格,d w 则不会

嗯 这是一些小细节


有谁知道怎么快速打开 setting.json 这样的文件吗

command+shift + p

我还想问下 command + shift + p 和 command + p 有什么区别

观察一下 自己说答案

command + shift + p 是配置 和 command + p 是找文件?

加 shift 是命令,普通的就是文件

setting.json 不是文件吗?哦哦是打开这个文件的命令

也可以用 f1 代替 cmd + shift + p


cw 只能先移动到单词开头才可以,有那种光标在单词中间,也可以直接删除单词的操作吗?

ciw


我想在单词的末尾,删除这个单词,有什么办法么?例如:abcef,向前删除 f 还会留着

diw 吧

diw 删除光标所在单词

ciw 删除光标所在单词,并开始插入

yiw 复制光标所在单词


dL 可以用 D 代替


此外,P 是粘贴到光标前,p 是粘贴到光标后


有一个问题是如何快速删除 html 的属性及对象解构赋值的属性,百度找到了答案:使用大写的 W,比如 diW,ciW 等,这个 W 就记成字串了,以为没啥用,其实左右有空格就算字串,所以可以删除属性


比较常见的操作符

编辑 (opens new window)
#Vim
上次更新: 6/19/2023, 2:35:11 PM
vim-02-掌握行相关的命令
vim-04-更有效率的处理单字符&undo&redo

← vim-02-掌握行相关的命令 vim-04-更有效率的处理单字符&undo&redo→

最近更新
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
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式