Vim法师的tricks
Posted Vim精进之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim法师的tricks相关的知识,希望对你有一定的参考价值。
《复联3》到最后一半英雄都灰飞烟灭在宇宙无敌计生委员灭霸的一个响指中,看起来下一部逆转结局的期望只能寄托在奇异博士身上了,为什么担当如此重任的是法师?我感觉是因为法师的技能点相当零碎,但同时能针对不同境况进行各种组合,幻化出非常之多的解决方案,碎但是灵活。奇异博士的设定是个天才外科手术医生,拥有过目不忘的技能,估计在他看来王管理的法术书跟医学大部头没差,所以在尼泊尔跟古一师傅学法术的时候进步相当之快,一会儿就能保护地球了。vim中也有很多很碎的知识点,组合起来更是有奇效,掌握好了这些小tricks也能让工作变得更加高效!既然没有奇异博士过目不忘的本领,那么经常性地使用,尤其是摒弃从前无脑重复的工作习惯,珍惜每一次击键,才是最快的成长之路。
今天将从左右两手来介绍这些vim的小法术
左手:功能
删除
按键 | 解释 |
---|---|
d(elete) | 删除,需指定范围 |
c(hange) | 删除并进入insert模式,需指定范围 |
s | 删除光标下的字符并进入insert模式(=dli=xi) |
S | 删除当前行的所有字符并进入insert模式(=0C=ddO=cc) |
C | 删除光标当前所在字符到行末并进入insert模式(=c$) |
D | 删除光标当前所在字符到行末(=d$) |
x | 删除光标下的字符(=dl) |
X | 删除光标左边的字符(=dh) |
复制
按键 | 解释 |
---|---|
y | 复制,需指定范围 |
Y | 复制一行(=yy) |
插入
按键 | 解释 |
---|---|
i | 进入插入模式,字符将在光标左边输入 |
I | 进入插入模式,字符将从行首开始输入 |
a | 进入插入模式,字符将在光标右边输入 |
A | 进入插入模式,字符将从行末开始输入 |
粘贴
按键 | 解释 |
---|---|
p | 将临时寄存器的内容粘贴到光标所在字符之后 |
P | 将临时寄存器的内容粘贴到光标所在字符之前 |
替换
按键 | 解释 |
---|---|
r | 替换光标下的一个字符 |
R | 进入replace模式持续替换字符直到到Esc退出该模式 |
转换大小写
按键 | 解释 |
---|---|
gu | 转换为小写,需指定范围 |
gU | 转换为大写,需指定范围 |
g~ | 大小写对换,需指定范围 |
右手:光标的移动
在word/string移动
按键 | 解释 |
---|---|
b | 往回移动到word的开头 |
B | 往回移动到string的开头 |
w | 往前移动到下一个word的开头 |
W | 往前移动到下一个string的开头 |
e | 往前移动到word的结 |
E | 往前移动到string的结尾 |
一般vim会认为由空格隔开的只包含{0~9}{a~z}{A~Z}{_}的字符串为一个word,空格隔开且包含其他符号的字符串认为是string
在行内搜索移动
按键 | 解释 |
---|---|
f | 行内往前搜索一个字符并将光标置于该字符上 |
F | 行内往后搜索一个字符并将光标置于该字符上 |
t | 行内往前搜索一个字符并将光标置于该字符之前 |
T | 行内往后搜索一个字符并将光标置于该字符之后 |
下面!就可以左手右手一个慢动作!录制宏的话还可以右手左手慢动作重播!
左右手 | d c y |
---|---|
b/B | 删除/复制光标所在位置到往回第一个word/string首字符(db/yb)/(dB/yB)并进入插入模式(cb)/(cB) |
e/E | 删除/复制光标所在位置到往前第一个word/string末字符(de/ye)/(dE/yE)并进入插入模式(ce)/(cE) |
w/W | 删除/复制光标所在位置到往前第一个word/string如果末尾有空格一并包含(dw/yw)/(dW/yW)并进入插入模式(cw)/(cW) |
f/F | 删除/复制到光标所在位置往前/往后查找到的第一个字符中间的所有字符,包含查找的字符(df{char}/yf{char})/(dF{char}/yF{char})并进入插入模式(cf{char})/(cF{char}) |
t/T | 删除/复制到光标所在位置往前/往后查找到的第一个字符中间的所有字符,不包含查找的字符(df{char}/yf{char})/(dF{char}/yF{char})并进入插入模式(cf{char})/(cF{char}) |
在左手右手的动作之间加入一些小小的修饰,效果拔群!
常用修饰 | 含义 |
---|---|
a(round) | eg: daw 删除光标下面一个word有空格的时候会带上一个空格 |
i(nside) | eg: diw 删除光标下面一个word |
number | eg: d3w 从光标下面一个词开始删到第3个词末 |
在开始介绍删除操作的时候有一些斜体的常用删除操作也被列出来了,他们由基本删除命令结合光标移动的原始操作也有在末尾列出,仅仅局限于vim包装好的这些当然不够,掌握核心要义万法归宗才能化繁为简。
除了上述这样的左+修饰+右的操作还有一些特殊的标记
特殊标记 | 含义 |
---|---|
" / { / [ / ( | eg: di" 删除一对"中间的字符 |
p | eg: dip删除一个段落 |
在工作中经常需要配置一些tool的config文件,也就是对其中大量的类似
set variable "value"
这样需要针对value修改的操作,将光标置于"value"上任意一处按下di"就可以删掉引号内的内容,再insert新的值就可以了,聪明的你到这里如果能发现直接使用ci"就能够一步完成删除跟插入那就真是棒棒的了。
在一开始接触vim的过程中,非常习惯于用到的是可视模式,将需要操作的对象像是在word里面用鼠标选中一样mark出来,进行复制粘贴移动修改,这样做除了直观没有任何好处,Ctrl-v然后上下左右一下一下挪到想去的位置,仅仅在录制宏的时候不具有可重复的稳定普适性就表明这么做是非常低效的。
奇异博士在平行时间线练习了1600多万次才录制好了一种精确终结灭霸的宏,他掌握了每个英雄的各种奇特特性,例如dip跟dap不同是后者会带一个空行,如果执行时光标在空行上那么删除的是空行+段落,如果光标在段落上,删除的是段落+空行,这些小小的差池都会导致宏的稳定性出现问题,就像博士连星爵的意气用事应该都考虑进去了这样才会有下一部的英雄复活。而我下一篇就要真的开始vimgolf之旅啦!
以上是关于Vim法师的tricks的主要内容,如果未能解决你的问题,请参考以下文章