对于所有电脑用户尤其是有接触linux的人来说,vim就是一个传说---神的编辑器或者编辑器之神吧。
传说的各种便捷、强大、无所不能、不可思议、上天入地等等等等,就是学习曲线陡峭。
我总是隔一段时间就会再去试试,然后又每次都没有潜心去学习使用,说破天它也只是一个编辑器,它就是个强大的记事本---当我能够在纯文本编辑器里输入足够快足够随心所欲的话,我实在找不到学习vim的理由,何况还有早期使用的磕磕绊绊。
直到今天,再次看了一篇vim文章,再次思考和感受,终于有些明白了vim的各种。
为什么这么说?
首先,我是个windows键盘党,多用visual studio,平常写代码insert delete home end 上下左右 shift ctrl alt都用得很多且随心所欲的人。
看看这个文章中(就算是别的文章里,能说的也就这么多了,跑不出这个范围了)vim的优势;
文中给出的vim学习方式,四部曲:
1.存活
2.感觉良好
3.better stronger faster
4.使用vim的超能力
1)存活
比如 insert/normal模式的切换 ---- 其他普通文本编辑器根本没有,操作还随意些。
x
:wq
dd
p
hjkl
这些基本且常见的功能无一不是常见的文本编辑器里也非常容易实现的功能,且快捷。
而对于vim来说,这几个基本键的掌握就相当于第一阶段--存活。
2)自我感觉良好
a 光标后插入
o 当前行后插入一个行
O 当前行前插入一个行
cw 从光标所在位置后到一个单词结尾的字符
0 到行头
^ 到本行第一个不是blank字符的位置
$ 到行尾
g_ 到本行最后一个不是blank的位置
/pattern 按照pattern搜索
p 粘贴
yy 。。
u undo
C-r redo
:e 打开文件
:w 存盘
:saveAs 另存为
:q! 强制退出
:bh :bn 打开多个文件
以上是第二阶段。
基本的代码编辑器中,都可以轻易实现。
比如 home end Ctrl+Shift+S Ctrl+O Ctrl + S Ctrl+Z/Y/C/V shift与上下左右的搭配使用等。
基本就可以快速地实现此处提到的几乎所有操作。
这是vim的第二阶段,自我感觉良好
3)better stronger faster
2dd 删除2行
3p 粘贴三次
Ng 到第n行
gg 到第一行
G 最后一行
按单词移动 w 到下一个单词的开头
e 到下一个单词的结尾
以下是最强的光标移动。
%: 匹配括号移动(对程序员很强大)
*和#:匹配光标当前所在的单词,移动光标到上/下一个匹配单词
比如 0y$ 先到行头,开始拷贝,直到本行最后一个字符。
ye 从当前位置拷贝到本单词的最后一个字符
y2/foo 拷贝两个单词foo之间的字符串。
gU 变大写
gu 变小写
简单来说,以上主要是vim里面的各种多样选择文本块或者段或者词等。
在普遍文本编辑器里,我们一般这时候就会用到鼠标来选择了。当然地,这就显得比较“low”了,而且也真的慢了是事实。
不过我也觉得vim里面命令行形式的快粘贴,更不直观且容易粘贴到错的位置。
但是 visual studio里面,依然可以基本轻松实现上述绝大部分操作。
比如 Ctrl+L 删除行
多次粘贴不说,你一个月能用到一次粘贴10行吗
Ctrl+G 到第n行
home/end 到第一行/最后一行
Ctrl+W选中当前单词
大写小写 Ctrl+U 与 Ctrl+Shift+U
范围选,比如选择20行并复制粘贴,确实基本鼠标一框,ctrl+C,然后点击光标到要去的地方,Ctrl+V,已经是最快的了。
Ctrl+F 搜索,且支持正则表达式
Ctrl+H 替换,且支持正则表达式
综上,应该是不能实现光标移动到某单词的开头/结尾这样的,也不是很方便成块的粘贴,基本需要鼠标。
但是另外我知道的就还有与按住alt的选择,可以无视行内容的结束,选择纵向的文本块等。
还可以按住alt,下拉鼠标,让光标同时在几个行中存在,同时在几个连续的行内插入同样内容,就好像我们用两支笔绑在一起写作业一样,写一次,产生两行。
以上是作者说的第三阶段,better stronger faster、。
这个比较进阶,只是我个人用了几年的visual studio了,现在这些功能早已经随心所欲,手指如飞。
假定我现在熟练掌握到了这个阶段,操作速度也绝不会比我现在在visual studio里面快,而且几乎可以肯定还会慢一些。
总之,在第3阶段,我依然觉得vim无法更快。
当然,也无法更准确。
4)终极阶段--vim超能力。
来看看作者怎么说。
“
你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,现在,我们向你介绍的是VIM杀手级的功能。下面这些功能是我只用vim的原因。
”
在当前行上移动光标: 0 ^ $ f F t T , ;
0 → 到行头
^ → 到本行的第一个非blank字符
$ → 到行尾
g_ → 到本行最后一个不是blank字符的位置。
fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
t, → 到逗号前的第一个字符。逗号可以变成其它字符。
3fa → 在当前行查找第三个出现的a。
F 和 T → 和 f 和 t 一样,只不过是相反方向。
***************
后面还有好多好多,不想看了。就这样,我也都不会。
而且这里看起来好像也确实很厉害的样子,我也不知道是在干什么。
综上所述,如果说vim有四个阶段,前三个阶段真没什么了不得的。
第四个很厉害,很陡峭,很难学,也很符合Linux系历来的工具套路“超级难学,超级难用,高度可定制,看起来很厉害”
---
我就算再非常熟练地掌握了前三阶段,编辑速度也绝不会比我现在用visualstudio、atom、vsCode、notepad++等更快更准。
第四个阶段,我不知道。也不知道说的是什么,所以说,这次还是没能体会到vim真正的强大之处。
只能把这个问题继续留到以后。