什么是 vim 语法
操作符 + 动作(比如我们的移动命令,主要用来设置区域范围)
操作符
删除:d
当我们按下 d 的时候编辑器下方会显示一个 d
这时就会进入一个 pending 状态,它会继续等待,等待我们输入一个动作,比如
当我们在的光标在2的位置时我们按下 d,然后再按一个动作到行尾也就是g_,2和后面的内容就都被删掉了
这里从当前光标位置到行首或者行尾的这个区间就是我们的区域范围
问题
在操作符的 pending 状态下我们之前设置的 H 和 L 快捷键不起作用了,这是因为 pending 也是一个单独的模式,需要单独配置
"vim.operatorPendingModeKeyBindings": [
{
"before": ["H"],
"after": ["^"]
},
{
"before": ["L"],
"after": ["g", "_"]
}
]
删除完成后并进入 insert 模式
c
复制
y
当前光标在当前行的任意位置,使用y 都是在下一行里插入复制的内容
基于单词的移动
单词的定义:对于符号标点来说一个符号就算一个单词
从左到右
e
移动到下一个单词的结尾(注:如果光标在本单词中并且不是最后一个字符的位置,则移动到本单词结尾,否则移动到下一单词的结尾)
w
移动到下一单词的开头
从右到左
b
移动到上一单词的开头
(注:只有光标在本单词的首字符上才会移动到上一单词的开头,否则移动到自己本身的首字符)
ge
移动到上一单词结尾
基于字串的移动
字串的定义:从当前字符开始到空格前的所有字符就属于一个字串
比如:
function get(name){}
上面的 function 是一个字串,get(name){} 是一个字串
字串的移动快捷键和单词的是一样的不过都换成大写
组合
cw:删除当前光标本身到当前单词结尾的字符
ea:在当前单词结尾处插入(注:如果当前光标在当前单词的结尾处,那么就会在下一单词的结尾处插入)
扩展
对于vim中的光标你可以认为是在当前光标元素的左侧,也就是说从右到左的操作不会包含当前光标元素,从左到右的会包含当前光标元素
比如:
const a = 1234567890
以当前光标位置所在字符是2为例
这里要注意我们删除当前光标位置到行首,也就是从右到左的操作,它会保留我们当前光标位置的字符,那么删除到行首就会保留 2345
如果从当前光标位置删除到行尾,也就是从左到右的操作,那么当前光标位置所在的字符也会被删除,那么最后保留的就是 const a = 1
网友评论