前言
本人以前是使用 Java 开发的,idea 香得不行,唯一弊端就是卡内存不够,所以给自己的 windows 小笔记本加了一个内存条,后面跑一个项目好多了。
自从去了公司,要用 go 开发了,而且组里有很多服务,需要同时开发,经常会打开很多个 goland,个人又不太喜欢从 $GOPATH 展开所有的项目,所以公司发的小笔记本逐渐的就扛不住了。毕竟开一个 goland 就占很多内存,所以开始接触 vim。
实际
其实还是觉得某种程度上脱离鼠标比较香吧,个人的 mac 装了各种插件,已经可以做到基本离开鼠标(触控板)操作。有人也会问触控板不香嘛,实际原因是,因为在公司开发有三个屏幕,电脑放在了最左边,如图。

vim 对比 idea
idea
身为一个使用 idea 多年的老玩家,idea 不得不说是一个很牛逼的 ide 了,里面的所有的索引都做的很好,可以帮助你找到所有方法的上下文。唯一缺点就是卡起来的时候,是真的卡。当然可以在 idea 上安装 IdeaVim,基本上满足 vim 玩家的日常所需,可以通过 /.ideavimrc 来配置一些 vim 的快捷键之类的,比如把 jj 绑定到 <esc>,自带一堆开发工具,比如 git compare 之类的,操作起来的时候还是需要依赖部分的鼠标吧。
vim 没有缓存,无法回滚,当 git 还没 commit/add 的时候,代码如果丢失是很容易找不回来的,idea 里有本地的历史记录,而 vim 肯定是不支持的了。
vim
唯一好处,帅!开玩笑的,真正操作起来在 bash 下进行编码的时候,你会发现真的是蛮快的,可能一个操作会比普通玩家快那么 1s 吧。
个人认为比较麻烦的事:
- 索引肯定没有 idea 好用,用 gopls 造出来的索引,
:GoImplements是可以找出来接口实现,但是却需要我先去泡一杯咖啡,:GoReffers用了好几次之后我就受不了了,基本搜不出来东西。 - git 分支代码对比,不知道是不是因为我插件没找到的原因,code review 的时候基本上不会使用 vim 去看,太难看了。
- 没有像 idea 那样的 run 键吧,一些 gotest 啥的还是需要手动去点的。
优势:
- 查看文件,装上
fzf后,效率又提高了不少, 本身有nerdtree作为目录,当写某段代码的时候可以通过ctrl + h切过去看看别的文件,再加上fzf后全局搜索文件/文件内容,方便得不行,用过就知道。 - 挪动速度明显高鼠标几个档次,可能当你手碰到鼠标时,我已经切到相应的地方了。
- 各种插件,也可以自定义一些自己喜爱的快捷键加快自己的操作。
- 别人看不懂你在操作啥,但是自己心里很清楚。
- 从 bash -> vim, vim -> bash 切换的很流畅,随时随地打开代码看。
其他编译器
vscode 可谓是真的良心的编译器了,貌似最近被大佬吐槽装了插件之后 go mod 没办法进到相应版本的包。emmmmmm。然后大佬好像也准备用一下 idea 了。windows 下用 vscode 还是 idea 我再斟酌一下吧,从某些扩展性来看可能我会用 vscode。java 就一定得是 idea 了,别的编译器写不动。
emacs 没怎么用过,听另一位大佬说很牛逼。
vi 就不说了,都用 vim 了,都将 vim 低版本兼容 vi 都关掉了。
基础配置
这期就先贴上一些不怎么用安装的东西吧,插件什么的后面再介绍,有这些配置,基本上编辑一个文件是没什么问题的了。
set nocompatible " 设置 vim 为不兼容 vi 模式
filetype off " 必须的
" -------------Vundle的配置文件-----------------
set rtp+=~/.vim/bundle/vundle/
call vundle#begin()
Plugin 'fatih/vim-go'
" 让 Vundle 管理 Vundle
" 此条必须有,需要额外安装
Plugin 'gmarik/vundle'
call vundle#end()
" -------------个人配置文件-----------------
colorscheme space-vim-dark
hi Comment cterm=italic
hi Normal ctermbg=NONE guibg=NONE
hi LineNr ctermbg=NONE guibg=NONE
hi SignColumn ctermbg=NONE guibg=NONE
set guifont=Monaco " 适合Ruby开发的字体 && 字号
set tabstop=4 " 设置tab键的宽度
set tw=120
set shiftwidth=4 " 换行时行间交错使用4个空格
set autoindent " 自动对齐
set expandtab " 设置Tab为空格
set backspace=2 " 设置退格键可用
set cindent shiftwidth=4 " 自动缩进4空格
set smartindent " 智能自动缩进
set ai! " 设置自动缩进
set nu! " 显示行号
set mouse=a " 启用鼠标
set ruler " 右下角显示光标位置的状态行
set incsearch " 查找book时,当输入/b时会自动找到
set hlsearch " 开启高亮显示结果
set incsearch " 开启实时搜索功能
set wrapscan " 搜索到文件两端时重新搜索
set nocompatible " 关闭兼容模式
set vb t_vb= " 关闭提示音
set wildmode=longest,full " 命令行补全
set wildmenu " 设置提示框
set cursorline " 设置当前行"
"set hidden " 允许在有未保存的修改时切换缓冲区
" set list " 显示Tab符,使用一高亮竖线代替
set listchars=tab:\|\ ,
syntax enable " 打开语法高亮
syntax on " 开启文件类型侦测
filetype indent on " 针对不同的文件类型采用不同的缩进格式
filetype plugin on " 针对不同的文件类型加载对应的插件
filetype plugin indent on " 用自动补全,必须有
vmap "+y :w !pbcopy<CR><CR>
nmap "+p :r !pbpaste<CR><CR>
" 一些方便的映射
let mapleader=','
let g:mapleader=','
let g:godef_split=2
set clipboard=unnamed
inoremap {<CR> {<CR>}<ESC>O
" 使用 jj 进入 normal 模式,超级好用
inoremap jj <Esc>`^
" 使用 leader+w 直接保存
inoremap <leader>w <Esc>:w<cr>
noremap <leader>w :w<cr>
noremap {<cr> {<cr><cr>
au FileType javascript set dictionary+=$HOME/.vim/bundle/vim-node-dict/dict/node.dict
au FileType javascript set tabstop=4
au FileType javascript set cindent shiftwidth=4 " 自动缩进4空格
" 切换 buffer
nnoremap <silent> [b :bprevious<CR>
nnoremap <silent> [n :bnext<CR>
" use ctrl+h/j/k/l switch window
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
" use :tabnext :tabprevious
noremap <silent> tbn :tabnext<CR>
noremap <silent> tbp :tabprevious<CR>
写代码专用
vim 中,如何做到相应语言的跳转和代码提示呢。
本人平时工作中用的是 go,之前对着自己的开发机和 mbp 都装了一次,业界上有 vim-go,coc.nvim 一些插件,基本平日我也是两个混着搞。当然 coc.nvim 的好处是他可以兼容很多语言的提示,比如 py, c等。
这里也不过多 copy 别人的博客了,贴上传送门自己看~
PegasusWang大佬教你配置coc.nvim
说实话,装这个的时候有各种坑,至今还踩着,不知道怎么解决,主要原因是 linux 和 unix 环境的表现竟然不一样。安装报错自行找 stack over flow 解决。
结语
平日里学习 vim 都是看 pegasusWang 大佬的知乎,里面很多很实用的工具,以后可以介绍一下自己喜欢搭配的一些插件,而具体如何使用,可能还是得依赖传送门哈哈哈哈哈,毕竟别人已经写得很好了。
最后的最后
为了骗一些大佬入坑,我觉得我还是有必要贴两张 terminal 的图来吸引一下各位的。
代码肯定是不知道什么时候写得demo了,将就感受一下 vim 的界面吧哈哈哈哈。可能有空的时候会改一下 NerdTree,但是考虑到貌似会使得我的 vim 变卡,还是之后再考虑吧。

