菜单开关

周梦康 发表于 2019-09-24 838 次浏览 标签 : Vim

首先升级 vim 版本

vim --version

90%都是vim7,时代在进步升级还是很必要的。yum 升级安装vim不支持python3。编译安装
先安装python3

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
tar -zxvf Python-3.6.1.tgz
cd Python-3.6.1/
./configure --prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

然后安装vim 8

wget ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2
tar -jxf vim-8.0.tar.bz2
cd vim80
./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp=yes \
--enable-python3interp=yes \
--with-python3-config-dir=/usr/local/python3/lib/python3.6/config-3.6m-x86_64-linux-gnu/ \
--prefix=/usr/local/vim
ln -s /usr/local/vim/bin/vim /usr/bin/vim

尝试了多次,不能同时支持python2python3,否则安装完以后都是动态载入,会导致后面的一些插件使用有问题。

基础配置

这篇文章我觉得写得很好,每行命令的解释的非常清晰

https://zhuanlan.zhihu.com/p/69725463

vim 默认配置文件是 ~/.vimrc,没有的话请自行创建。配置如下:

" 禁止生成 swap 恢复文件
" 早期计算机经常崩溃,vim 会自动创建一个 .swp 结尾的文件
" 崩溃重启后可以从 .swap 文件恢复
" 现在计算机鲜少崩溃了,可以禁用此功能
set noswapfile
" vim 内部使用的编码,默认使用 latin1,改成通用的 utf8 编码,避免乱码
set encoding=utf-8
" 文件编码探测列表
" vim 启动的时候会依次使用本配置中的编码对文件内容进行解码
" 如果遇到解码失败,则尝试使用下一个编码
" 常见的乱码基本都是 windows 下的 gb2312, gbk, gb18030 等编码导致的
" 所以探测一下 utf8 和 gbk 足以应付大多数情况了
set fileencodings=utf-8,gb18030
" 在插入模式按回车时 vim 会自动根据上一行的缩进级别缩进
set autoindent
" 修正 vim 删除/退格键行为
" 原生的 vim 行为有点怪:
" 如果你在一行的开头切换到插入模式,这时按退格无法退到上一行
" 如果你在一行的某一列切换到插入模式,这时按退格无法退删除这一列之前的字符
" 如果你开启了 autoindent,按回车时 vim 会根据上一行自动缩进,这时按退格无法删除缩进字符
" 通过设置 eol, start 和 indent 可以修正上述行为
set backspace=eol,start,indent
" vim 默认使用单行显示状态,但有些插件需要使用双行展示,不妨直接设成 2
set laststatus=2
" 高亮光标所在行
" set cursorline " 有人还会高亮当前列,可以通过 set cursorcolumn 开启,但有点过了,不推荐
" 显示窗口比较小的时候折行展示,不然需要水平翻页,推荐
set linebreak
" 开启语法高亮
syntax on
" 开启自动识别文件类型,并根据文件类型加载不同的插件和缩进规则
filetype plugin indent on

新手同学注意,复制粘贴的时候先执行命令: set paste然后输入i进行插入。

高亮所在行,我觉得效果没有iterm2里自带的效果好,所以我也注释了

如果你不使用iterm2可以使用set cursorline开启

插件管理

安装 vim-plug

Vundle的时代已经过去,vim-plug安装更快捷

主页地址 https://github.com/junegunn/vim-plug

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

这命令参数会递归创建目录,一个命令就安装完毕了。

然后在上面的~/.vimrc里面配置插件区域

call plug#begin('~/.vim/plugged')

call plug#end()

比如在beginend中间增加一行

call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
call plug#end()

然后在vim里执行

:source %
:PlugInstall

然后有缓存没有发现新的插件可以输入:PlugStatus然后再:PlugInstall,国内访问github比较慢,可能安装进度也出现假死现象,再安装的左侧框内输入:PlugStatus来查看是否安装成功,以:q退出安装界面。

然后在~/.vimrc里面增加一个快捷键来使用这个插件

map <C-n> :NERDTreeToggle<CR>

使用ctrl+n就能看到它的效果了。不过我使用过程中发现该插件在双击菜单文件的时候总是会报错,就不推荐了。

功能增强

我的目标是一个轻巧的命令行下的编辑器。既要开发效率得到提升,也要它保持轻巧敏捷。不想太为此而花太多时间。(不过我为了筹备本位确实踩了不少坑)
优秀的插件在这里都能找到 https://vimawesome.com/

代码跳转

跳转依赖ctags文件,可以使用 ctags,但是ctags年久失修,很多bug,比如直接系统头文件tag的时候,stdio.h里面的好多函数都丢失了,需要使用特定的参数才能跳过,详情见 参考 https://mengkang.net/1397.html 这篇博客。
建议使用ctags的升级版universal-ctags
安装文档:https://github.com/universal-ctags/ctags/blob/master/docs/autotools.rst

git clone https://github.com/universal-ctags/ctags.git
cd ctags
./autogen.sh
./configure --prefix=/usr/local
make
sudo make install

索引文件自动更新插件 vim-gutentags

Plug 'ludovicchabant/vim-gutentags'

配置

" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']

" 所生成的数据文件的名称
let g:gutentags_ctags_tagfile = '.tags'

" 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags

" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']

自动补全

vim8 之前使用OmniCppComplete+neocomplete也凑合能用,而且还轻巧。
对比安装了YouCompleteMedeoplete.nvimcoc.nvim,第一个实在太复杂繁琐,第二个我依赖的插件总是报错,第三个非常顺利,安装简单,时间也短。

# 安装nodejs
curl -sL install-node.now.sh | sh

配置~/.vimrc

Plug 'neoclide/coc.nvim', {'do': { -> coc#util#install()}}

安装完以后

:CocInstall coc-phpls

试写了下 php 效果还挺不错,代码错误提醒也很明显。

https://github.com/wsdjeg/vim-galore-zh_cn
http://www.skywind.me/blog/archives/2084

评论列表