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", "_"]
}
]
2
3
4
5
6
7
8
9
10
如果要在终端中改键:
.vimrc
onoremap H ^
onoremap L g_
2
onoremap
表示在输入完操作后等待时间按键绑定
c
: 删除并进入 insert
模式
y
: 复制
d/c/y
删除/复制后,都会把字符存储在寄存器中
# 基于单词/字串的移动
单词:字母组成的单词、括号等
一个单词
的定义是连续的「数字 + 字母 + 下划线」,或者连续的「特殊字符」。比如 hello, world!!!
里包含 hello
、,
、world
和 !!!
四个单词。按 w
跳转时,会跳过单词后面的所有空白字符,落在下一个单词的开头。示例:
↓ 光标在这里
Hello, world!
↑ 按下 w
↑ 按下 e
Hello, world!
↑ 按两下 w
↑ 按两下 e
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 就记成字串了,以为没啥用,其实左右有空格就算字串,所以可以删除属性
比较常见的操作符
- 01
- 搭配 Jenkins 实现自动化打包微前端多个项目09-15
- 02
- 自动化打包微前端多个项目09-15
- 03
- el-upload 直传阿里 oss 并且显示自带进度条和视频回显封面图06-05