zoukankan      html  css  js  c++  java
  • 简单实用而不追求时髦的 Vim 配置

    前言##

    由于 Vim 的广泛流行,在网络上关于 Vim 的自定义配置汗牛充栋。既有高手 Tim Pope 的极简配置 tpope/vim-sensible(这个配置一个插件都没有),也有 spf13/spf13-vimSpaceVim 这样大而全的配置。而对我来说,我喜欢简洁而优雅,一大堆 Plugin 堆砌起来的东西我固然不喜欢,但是一个插件都没有的极简配置那用起来也不太顺手。所以我必须得自己配。

    自己配 Vim,必然涉及到 Plugin 的选型的问题。说到选型,那就有很多话要说了。首先是 Vim 自身版本的进步和功能的进步,目前 Vim 已经进入到 Vim 8 的时代,增加了不少新功能,比如异步啊、比如内置 Terminal 啊之类的。而且还有 NeoVim 和它抢饭碗。其次就是 Vim 插件的作者的理念发生了变化,他们逐渐瞧不上纯粹 VimScript 写的插件,毕竟纯 VimScript 写的插件功能比较有限,速度也不够快。目前的 Vim 插件有几个发展趋势:一是要充分利用异步的支持,二是往往使用某些后端提供更强大的功能支持,三是喜欢搞大而全的框架。下面我来逐一举例说明。

    例如管理插件的插件,我以前一直都是用 Vundle,我觉得挺好用的。但是这几年又雨后春笋般的冒出了几种新的管理插件的插件,像 junegunn/vim-plug
    Shougo/dein.vim,看一下它们的说明,无一例外都是说使用了并发技术,加快了插件的下载速度。

    再例如 Vim 中的自动补全。其实 Vim 自身就支持补全功能,不过使用起来一点都不自动,需要使用 Ctrl+P 或者 Ctrl+X Ctrl+O 这样的快捷键才会调出补全功能。Vim 自身的补全功能支持 buffers 中的单词,也支持 dictionary 和 tags 中的条目。但是不管怎么说,都只是基于字面意义上的补全,不支持深层次的对编程语言的语义分析。但是可以用后端解决这个问题啊。像 Valloric/YouCompleteMe,在网络上的名声就是典型的难安装难配置,因为它需要使用 Clang 作为后端提供对 C/C++ 语义的支持,使用 Jedi 提供对 Python 的支持,使用 OmniSharp 提供对 C# 的支持,等等……。正是如此,使得我们若是想使用某些插件,还不得不在系统上安装 Clang、Python、Lua 这样的一些程序,比较复杂。

    自动补全中还有大名鼎鼎的 Shougo/neocomplete.vim。但是我到 github 上一看,好家伙,居然说在 Vim 8 上建议就不要用了,要用就用 Shougo/deoplete.nvim。这也算是 Vim 版本的升级推动插件的升级吧,虽然怎么看怎么像这些插件倾向于 NeoVim 更多一点。而 deoplete 也只是一个自动补全的框架,它还是需要很多后端对编程语言的语义分析提供支持。看下面这个截图,这些都是 deoplete 所需要的后端:

    再来一个例子,关于 Vim 中文件管理的,老牌的 NerdTree 不用说了吧,我用的挺舒服的。但现在流行的趋势是 vimfiler。然后我在 github 上一看,马上发现两个难题。一是 vimfiler 需要 unite.vim 支持,二是这个插件也不更新了,在 Vim 8 或者 NeoVim 的时代,请使用 Shougo/defx.nvim ,而且在 Defx 的文档中,赤裸裸地写明了,需要 Python 3.6.1+ 的支持。哦对了,必须提一下,Defx 我试用了,根本没配成功。

    通过前面的介绍,发现这个 Shougo 还真是有点高产。前面提到的 unite.vim 也是他写的,而且又升级了。在 Vim 8 或 NeoVim 中建议使用 Shougo/denite.nvim。这里的 unite 和 denite 就是我前面说的大而全的框架,框架之下,需要别的更多的插件作为 source 来提供更多的功能,而这个框架,负责把控 Vim 的界面。

    还有一个网红插件 Yggdroot/LeaderF,主要是为了取代经典的 ctrlp,而且其功能比 ctrlp 强大不少。这个倒是没有要求 Vim 8,不过还是要求 Python。值得一用。

    鉴于以上提到的错综复杂的关系,以及我自身的强迫症,我决定还是回归经典。Vim 7 就能用多好,纯 VimScript 多好,不想整那后端这后端的。所以我还是使用 Vundle 管理插件,并选择了 5 到 6 个最常用的插件,其中一个还是 scheme,算不得真正的插件。唯一的升级,可能算是把 taglist 升级为 tagbar 了吧。另外,我还是选择了 ctrlp,没有选择 LeaderF。我觉得功能够用了。至于 tpope/vim-surroundnerdcommenter 之类的,那就不要了吧,不要它们也多敲不了几下键盘,还可以省下学习成本。

    必须得说明一下:怎么为 Vim 配插件还得看自己的需求。我主要是看文档和看代码,偶尔改改配置文件,有时还要在非 GUI 环境下改配置文件。就算写代码也只用 Vim 写非常简单的。所以我这个经典配置完全够用了,而且开箱即用,超级方便。至于需求比较复杂的,建议玩玩我前面提到的 SpaceVim

    准备工作##

    为了使用 Vim 自带的 tag 功能和按 tag 跳转功能,至少要安装 ctags。如果要阅读 Linux 的 Kernel 源代码,还得安装这个包,并解压缩。然后在 /usr/include/usr/src/linux-source-4.15.0目录中执行 ctags 命令生成 tags 文件。命令如下:

    sudo apt install exuberant-ctags linux-source
    cd /usr/src/
    sudo tar jxvf linux-source-4.15.0.tar.bz2
    cd linux-source-4.15.0
    sudo ctags -R --c++-kinds=+p --fields=+ias --extra=+q
    cd /usr/include
    sudo ctags -R --c++-kinds=+p --fields=+ias --extra=+q
    

    ctags 可不仅仅只支持 C/C++ 语言哦。使用如下命令,可以看到 ctags 支持很多语言的:

    ctags --list-languages
    

    我的 Vim 配置##

    配置文件是 ~/.vimrc。我的思路是使用 Vundle 管理插件,而且只选择了少量几个最常用的插件。加上空行,代码也只有 75 行,非常简洁。其内容如下:

    set nocompatible
    
    filetype off
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()
    Plugin 'VundleVim/Vundle.vim'
    Plugin 'majutsushi/tagbar'
    Plugin 'kien/ctrlp.vim'
    Plugin 'scrooloose/nerdtree'
    Plugin 'vim-scripts/AutoComplPop'
    Plugin 'vim-scripts/OmniCppComplete'
    Plugin 'altercation/vim-colors-solarized'
    call vundle#end()
    filetype plugin indent on
    
    set history=1000
    set ruler
    set number
    set showcmd
    set showmode
    set laststatus=2
    set cmdheight=2
    set scrolloff=3
    
    set fillchars=stl: ,stlnc: ,vert: 
    
    set noerrorbells
    set novisualbell
    set t_vb=
    
    syntax on
    colorscheme desert
    set background=dark
    set cursorline
    hi CursorLine term=NONE cterm=NONE ctermbg=0 guibg=Gray40
    
    set backspace=2
    set whichwrap+=<,>,h,l
    
    set expandtab
    set smarttab
    set shiftwidth=4
    set tabstop=4
    set autoindent
    set cindent
    
    set nobackup
    set noswapfile
    set autoread
    set autowrite
    set autochdir
    set fileencodings=utf-8
    set fileformats=unix,dos,mac
    
    set showmatch
    set matchtime=2
    set hlsearch
    set incsearch
    set ignorecase
    set smartcase
    set magic
    set lazyredraw
    set nowrapscan
    set iskeyword+=_,$,@,%,#,-,.
    
    if has("gui_running")
        colorscheme solarized
        set guifont=monospace 12
    endif
    
    set tags+=/usr/include/tags
    map <F2> :NERDTreeToggle<CR>
    map <F3> :TagbarToggle<CR>
    map <F4> :CtrlPMixed<CR>
    map <F12> :!ctags -R --c++-kinds=+p --fields=+ias --extra=+q -I<CR>
    

    使用 Vundle 管理插件##

    我选择的插件管理器是 Vundle。首先在主目录下建立 .vim/bundle 目录,然后进入该目录,使用 git 下载 Vundle。

    mkdir ~/.vim
    mkdir ~/.vim/bundle
    cd ~/.vim/bundle
    git clone https://github.com/VundleVim/Vundle.vim.git
    

    配置方法见上面的第 3 到 14 行。然后启动 Vim,在其中输入 :PluginInstall 安装插件。

    运行效果##

    在使用过程中,按 F2 键调出 NerdTree,按 F3 键调出 Tagbar,按 F4 键调出 CtrlP。如果查看某个项目的代码,只需要进入该项目的目录后,按 F12 键,则自动生成该项目的 tags 文件。控制台下运行,是这个效果:

    用 GVim 运行,是这个效果:

  • 相关阅读:
    火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件
    memcache安装环境:WINDOWS 7
    PHP正则表达式
    968. 监控二叉树 力扣(困难) dfs 官方说DP
    375. 猜数字大小 II 力扣(中等) 区间动态规划、记忆化搜索
    629. K个逆序对数组 力扣(困难) 区间动态规划
    剑指 Offer 51. 数组中的逆序对 力扣(困难) 巧用归并排序算法
    488. 祖玛游戏 力扣(困难) dfs
    16. 最接近的三数之和 力扣(中等) 双指针
    319. 灯泡开关 力扣(中等) 数论
  • 原文地址:https://www.cnblogs.com/youxia/p/linux034.html
Copyright © 2011-2022 走看看