都知道vim具有高度的可配置性,虽然有大神说过原生的vim可以做插件提供的90%的功能,但是那也是需要一定的境界,不说别的,就vim那出厂界面就会吓走一批强迫症患者了。所以入手vim的话,第一步肯定是要将她配置成我们心中那美好的形态,不然真的下不来手。
首先是下载合适的vim版本,linux下都是可以实现一键安装,倒是windows下可能会下载错,你下载的可能是32位的版本,32位的不支持64位的python,所以建议下载64位的vim。
以下是本人vim配置的效果图,说不上多么高大上,至少是适合自己的,需要注意的是这个版本需要有python的支持,如果没有python的话,某些插件可能无法正常使用。
是不是迫不及待自己也想拥有一个呢,我们都是坚定的“拿来主义”者,半小时内就可以搞定,只需要以下2个步骤:
1、相关依赖
linux/mac:
sudo apt-get install curl vim exuberant-ctags git ack-grep
sudo pip install pep8 flake8 pyflakes isort yapf
windows:
2、复制配置文件
配置文件在Zhu-Jun/.vimrc,如果是linux/mac用户,那么将里面的.vimrc拷贝到~/目录下,如果是windows用户,将_vimrc拷贝到%USERPROFILE%目录下,一般是C:\Users\XXX\(XXX是用户名)。
以上两步之后,打开vim,它会自动加载需要的内容,大概10-5分钟,至此,vim已经配置完成,windows下如果报缺少lua53.dll,需要下载一个放到vim的安装目录下。
下面介绍一下vimrc文件的一些比较重要的内容。
基本设置
set nocompatible " 不兼容vi模式
set langmenu=en_US " 菜单语言 中文为 zh_CN
set fileencodings=utf-8,chinese,latin-1
set fileencoding=utf-8 " 中文不乱码了,世界都好了
set number " 窗口左侧显示行号
set relativenumber " 配合number,更高效的行间跳转
au GUIEnter * simalt ~x " vim 以最大化打开
set ignorecase " 查找时忽略大小写
set smartcase " 当输入中含有大写的时候会强制区分大小写
set incsearch " 输入进行中实时匹配查找到的字符串
set autoindent " 用来自动缩进
set smartindent " 自动判断缩进长度,一般适用于类C语言
set expandtab " 用一定的空格来代替tab
set tabstop=4 " tab占4个空格
set softtabstop=4 " 设置expandtab的情况下,输入backspace删除的空格
set shiftwidth=4 "一般情况下tabstop=softtabstop=shiftwidth,这样不会乱
上面比较容易搞乱的应该tab相关的内容了,如果你还是很乱,可以看看这里:Tabs and Spaces
key-notation(键位标识)
key跟标识的对应关系,详情可见:help key-notation
map
map可以理解成键位的映射,如:
nmap G Gzz
上面指令的作用是在normal模式下将G(表示移动的最后一行)映射 Gzz(移动到最后一行+居中,zz表示居中),也就是命令生效之后,G就跟Gzz有相同的作用。
其中n表示在normal模式下起作用,同理,vmap表示在visual模式下,具体对应规则见下图:
值得注意的是nmap一般写成nnoremap比较好,中间的nore表示no recursion,不递归,比如
nmap w ww
nmap ww www
上面两句话导致的结果是按完一次w之后,光标会不断地向后移动,因为w触发ww,而ww又会触发w,如此递归下去,如果改成nnoremap w ww之后就不会再出现这个问题。
如果map的第二个参数是以:开头,那么表示映射的内容在命令行中生效,如
map tn :tabn<CR>
上面指令的意思是,输入tn,相当于①输入:(进入命令行模式)②输入tabn(跳到另一个tab页面)③输入回车
mapleader
这是vim中一个很重要的概念,leader的存在可以非常灵活地自定义快捷方式,很大地提高编辑的效率。
let mapleader=","
nmap <leader>h ^
默认的leader键是\,这还是有点反人类的,所以上面的第一句的意思是将leader键设置成逗号“,”,你也可以根据自己的喜好设置成空格(let mapleader = "\<space>")等,第二句话的意思表示当你再normal模式下输入,l(逗号+h),那么光标会移动到行首,是不是比按<Shift>+6方便不少?
Vundle
vim的扩展性很大程度上来自于各种插件的存在,一般情况下你可能会用到非常多的插件,如上面的配置文件中就有30多个插件,这么多的插件管理起来还是很麻烦的,增啥改查都很头疼,有了vundle就再也不怕了,如果你用了上面提供的配置文件的话,其实你已经见识到了它的强大,因为它已经默默帮你装了30多个插件。
set rtp+=~/vimfiles/bundle/Vundle.vim "表示vundle的位置在Vundle.vim下
call vundle#begin('~/vimfiles/bundle/') "表示插件存放的位置在bundle下
如果想添加什么插件只需要call vundle#begin和call vundle#end之间添加github上的插件位置,然后执行PluginInstall。删除更简单了,只需要将Plugin那一行去掉或者注释掉,然后执行PluginClean,接着输入Y就OK了,插件升级执行PluginUpdate一键搞定。需要注意的是PluginInstall和PluginClean之间可能需要先保存然后重启。
如果你修改了vimrc文件后想立即生效,但是又不想重启,有什么解决的办法吗?当然有,只需要so ~/.vimrc(so ~/_vimrc),其中so表示source。 如果你当前编辑的文件就是vimrc文件的话,那么so %就够了,其中%是一个特殊的寄存器,表示当前文件的名称,具体可以:help registers。
插件非常多,Vim Awesome上提供了非常详细的插件列表,总有几个是你的菜,在此我只推荐一个插件:
Plugin 'ianva/vim-youdao-translater'
有很多插件的官方文档缺少中文说明,说多都是泪,如果你的英语足够好,那就没必要了。这个插件其实就是有道翻译,用法很简单,Ctrl-t会翻译光标下对应的单词,<leader>yd 可以让你输入想翻译的单词。
Abbreviate
在idea intellij中有大量代码可以通过Ctrl-j完成,比如sout然后ctrl-j就可以快速生成System.out.println()。vim也不落后,只不过需要你自己去思考要配置哪些适合自己的缩写,一般用来缩写的都是使用频率不高的词,不然反而会降低效率,比较常见的有:
iabbrev teh the 或者 iab teh the
当你把the输错成teh时,会自动帮你更正为the。跟map类似,iab中的i表示作用在insert模式下,cabbrev(cab)仅作用于命令行模式,abbrev (ab )作用于所有模式下,触发缩写替换的快捷键是CTRL-]。
配置里面其它的很多内容都牵涉到vimscript,相信有一定编程基础的话读起来还是不费劲的,留着以后慢慢摸索也不迟。