记录最近的Vim使用与调教过程

这一切还要从那天晚上突然失灵的电脑触摸板说起……

背景

我对Vim并不陌生,也用Vim写过代码,但也只是靠i:wq来做一些小的事情,比如写写commit message之类。如果能用vscode我还是用vscode的。我的确被别人安利过Vim,听过很多人说Vim熟练了会大大提升效率,它只用键盘。然而我还是望而却步:要学的东西太多了啊,这么多快捷键,很难在短时间内达到熟练。而且我觉得vscode已经很方便了,为啥要用Vim?

那我为什么又要用Vim呢?还是因为两天前我抱着电脑在床上瞎看东西,突然触摸板失灵了。我又懒得去拿鼠标,就只能用键盘了。结果是,在浏览器里点链接要狂按Tab键,使用体验极差。这时我突然想起来,以前看过视频,有一个浏览器插件,安装之后就能像Vim一样用键盘浏览网页,也有hjkl移动等等类似Vim的功能。

狂按Tab键之后终于找到并且下载了这个插件,叫做Vimium。简单熟悉了一下主要功能,还不错。于是我又顺路去学了学Vim,并且简单地配置了一下。

Vim学习与配置

学习Vim:使用vimtutor

Vim自带教程。在终端输入vimtutor并按回车键即可打开。

vimtutor看起来不短,但实际上是因为它编写的很详细。所以大约半小时就可以把整个教程过一遍。

看一遍基本能记住七成,隔一天再看一遍就记得差不多了。重点是多写点小程序什么的自己练手,教程上也说了,不要去记对应规则,而是通过写东西来练手、掌握。

配置Vim:颜色主题与插件

主题配色:onedark

听取了同学的建议,使用了onedark配色,GitHub链接:https://github.com/joshdick/onedark.vim。按照README文件的说明进行安装即可,装完感觉还是挺不错的。

这位同学还使用了treesitter高亮,之后再说罢,现在已经不赖了。

终端界面:ohmyzsh - agnoster

采用ohmyzsh的agnoster样式(按照官方文件的说法这应该是最花哨的样式了hhhh,不过真觉得挺好看的,我觉得也不花哨,还是足够简洁的)。

ohmyzsh的GitHub链接:https://github.com/ohmyzsh/ohmyzsh。按照README文件的说明来安装即可。

另外,注意要先安装zsh才能安装ohmyzsh,另外千万不要一时兴起直接用sudo apt remove把zsh卸载了,否则就打不开ubuntu终端了(血泪教训QAQ)。因为这样的文件会修改终端的配置,如果手滑修改了,要去找到/etc目录下的passwd(应该是叫这个)文件,把含有zsh的那一行中的zsh改成bash。

另外我还做了个小动作:让终端只显示相对路径,终端命令之前的“前摇”就简洁了很多了。

如果采用agnoster,要实现如上的效果,就得修改agnoster主题的配置文件,可参考教程:https://www.cnblogs.com/goldsunshine/p/9567613.html

另外,要去掉主机名,即从原来的“用户名@主机名”变为仅显示用户名或者用户名也不显示,可以找到函数prompt_context()所在行(我的是从89行开始),if和fi中间那一行最后有个%n@%m,%n指代的是用户名,%m指代的是主机名,按照需求修改即可。

插件管理器:Vundle

我使用Vundle来管理插件,这里有一篇不错的Vundle安装和使用教程:https://cloud.tencent.com/developer/article/1669204

自动补全插件:YouCompleteMe

我的Vim起初是裸奔的(谁的不是呢),然后因为没有自动补全提示很难受……于是一通google,发现大家还挺推荐YouCompleteMe(GitHub链接:https://github.com/ycm-core/YouCompleteMe)这个插件的,还有人直接说是Vim必备的几大神器之一。要用Vundle来安装,于是Vundle就顺理成章地成为我的插件管理器了。

另外,安装完YouCompleteMe之后,还要把设置文件(路径:~/.vimrc)再修改一下,在call vundle#begin()call vundle#end()之间加入下面的语句,这样会有更好的体验:

let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_complete_in_strings=1
let g:ycm_key_invoke_completion = '<c-z>'

noremap <c-z> <NOP>

let g:ycm_semantic_triggers =  {
            \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
            \ 'cs,lua,javascript': ['re!\w{2}'],
            \ }

这个YouCompleteMe配置过程中还有可能遇到各种各样的问题,上网查或者自己看配置文件猜解决方法也能搞定。配置好之后使用体验也还是可以的(虽然我没感觉像传的那么神)。

“彩虹括号”插件:Rainbow Parenthesis Improved

后来我又通过Vundle安装了“彩虹括号”(Rainbow Parenthesis Improved,GitHub链接:https://github.com/luochen1990/rainbow)。这样一来看括号就舒服多了。


经过上面这一番折腾,我的Vim界面如下(字体是Jetbrains Mono,我觉得挺好看的):

2
3

Vimium:浏览器仿Vim插件

我主用浏览器是chrome,在chrome应用商店可以找到Vimium,链接:https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb?hl=zh-CN

可以按?键(即shift + /)调出使用说明。到该插件的GitHub仓库下查看README文件也有使用介绍:https://github.com/philc/vimium

使用熟练之后还挺舒服的,尤其是靠在床上看电脑的时候。不过也有局限性,尤其是在看B站的时候。对我来说还是不能完全替代鼠标的,不过大多数场景下可以不用鼠标自由浏览,熟练之后切换标签页还是挺快的。