學習vim: 配置python相關插件

注:本文中所有的插件均爲作者長時間實踐挑選的產物,適合入門Vim編輯器之後的人羣。通過增加不同插件,幾乎可以完全拋棄鼠標,使代碼效率倍增,給人一種很爽的感覺,哈哈哈。

以下所有配置均在ubuntu16.04下安裝完成:

配置vim插件管理工具

常用的vim插件管理工具有兩個,一個是vim-pathogen另一個是Vundle.vim.

配置vim-pathogen

對比了一下兩個工具,這裏我選擇的是vim-pathogen,其配置過程簡單描述如下,詳細信息直接參考官網就可以了:

  • 首先在~/.vim下創建兩個文件夾,一個是autoload,另一個是bundle,以後所有的插件應用都安裝在bundle中。然後下載pathogen到autoload下面。

    $ mkdir -p ~/.vim/autoload ~/.vim/bundle && \
    $ curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
    
  • 配置.vimrc,在.vimrc添加如下代碼:

    $ execute pathogen#infect()
    $ syntax on
    $ filetype plugin indent on
    
  • 基本配置完上述內容就可以使用了,詳情請參考文檔

配置vimogen

vimogen結合上面的pathogen使得安裝插件更加容易,只要在一個固定的文件.vimogen_repos中添加上插件的github地址,然後就可以使用命令自動安裝。在安裝好pathogen之後,添加如下代碼即可:

  • 安裝

    $ git clone https://github.com/rkulla/vimogen
    $ chmod u+x vimogen
    $ cp vimogen to your $PATH
    
  • 使用
    首先將想要安裝軟件的地址放在~/.vimogen_repos裏面(見我的github),像下面這樣:

    https://github.com/Valloric/YouCompleteMe
    https://github.com/jeaye/color_coded
    https://github.com/rdnetto/YCM-Generator
    https://github.com/scrooloose/nerdtree
    https://github.com/Shougo/neocomplete.vim
    

    然後執行vimogen

    $ vimogen
    

    安裝界面如下:

    1) INSTALL
    2) UNINSTALL
    3) UPDATE
    4) EXIT
    Enter the number of the menu option to perform:
    

    直接按1就可以了,程序會自動安裝上面鏈接裏面的插件,如果已經安裝,則會跳過。
    如果按2,則是卸載已經安裝的插件,直接選擇要卸載的插件對應的編號即可。

配置常用插件

1. YouCompleteMe

YouCompleteMe基本上支持各種語言的自動補全,其安裝過程需要編譯一下,因此這裏介紹一下安裝過程,後面的幾個插件因爲直接使用vimogen裝上就可以直接使用,因此不在過多介紹後面幾類插件。YCM安裝過程如下:

  • 下載
    直接使用vimogen一節介紹的方法講YCM下載到~/.vim/bundle中,然後進入到~/.vim/bundle/YouCompleteMe/路徑下。

  • 安裝
    按照自己的需求選擇編譯命令,這裏我因爲常用的是python,但是也把c-family語言也選上了,因此執行下面命令進行編譯安裝:

    cd ~/.vim/bundle/YouCompleteMe
    python3 install.py --clang-completer
    # 注意:如果編譯開始時出錯一般是缺少各種工具,按照提示安裝就可以了。
    
  • 配置
    這裏根據自己的需求配置一些常用參數在.vimrc中。
    我配置的如下:

    "==================YCM====================
    let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'
    nnoremap <F12> :YcmCompleter GoToDefinitionElseDeclaration<CR>
    

    配置的第二行配置了一個快捷鍵用來使用F12實現go to definition的功能。

    自動補全的效果如下:
    ycm.png
    ycm2.png

常見問題:

  1. 在有一次配置服務器上的vim編輯器時候,遇到下面的問題:

    YouCompleteMe unavailable no module named builtins.

    查資料發現:這是因爲網絡很慢,導致要依賴的文件還沒有下載全,所以可以先把文件下載了。

    解決辦法:

    $ cd /home/yourusername/.vim/bundle/YouCompleteMe
    $ git submodule update --init --recursive
    

2. neocomplete.vim

3. nerdtree

  • nerdtree實現在左側目錄樹功能,其效果如下:
    tree.png
  • 使用方法:
    1. m顯示出菜單,然後根據菜單提示可以進行更多操作,比如這裏我想新建一個文件(夾),直接按a, 然後輸入想新建的文件(夾)即可。
      nerdtree

4. vim-airline

主要負責狀態欄顯示

5. vim-gitgutter

主要負責git狀態顯示

6. vim-signify

和vim-gitgutter結合使用

7. vim-fugitive

更強大的git管理

8. auto-pairs

括號,引號等自動補全,很實用

9. indentLine

顯示縮進

10. vim-colorschemes

代碼配色方案

最終效果

  • 通過配置上面插件,我經常使用的界面大概長成下面的樣子。最終效果

.vimrc

最後把常用的.vimrc文件配置貼出來用於給讀者參考. 感興趣的讀者可以去我的github上下載。

"===============pathogen=================                                                                                                                                                                           
execute pathogen#infect()                                                                                                                                                                                           
syntax on                                                                                                                                                                                                           
filetype plugin indent on                                                                                                                                                                                           
                                                                                                                                                                                                                    
""===============基本設置=================                                                                                                                                                                          
set number              "顯示行號                                                                                                                                                                                   
set ruler               "打開狀態欄標尺                                                                                                                                                                             
syntax on               "自動語法高亮                                                                                                                                                                               
set shiftwidth=4        "默認縮進4個空格                                                                                                                                                                            
set softtabstop=4       "使用tab時 tab空格數                                                                                                                                                                        
set tabstop=4           "tab 代表4個空格                                                                                                                                                                            
set expandtab           "使用空格替換tab                                                                                                                                                                            
set showmatch           "高亮顯示匹配的括號                                                                                                                                                                         
set hlsearch            "高亮顯示搜索結果                                                                                                                                                                           
set t_Co=256            "顏色                                                                                                                                                                                       
set foldmethod=indent   "代碼摺疊                                                                                                                                                                                   
set foldlevel=99                                                                                                                                                                                                    
nnoremap <space> za                                                                                                                                                                                                 
                                                                                                                                                                                                                    
"===============nerdtree=================                                                                                                                                                                           
autocmd StdinReadPre * let s:std_in=1                                                                                                                                                                               
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in") | exe 'NERDTree' argv()[0] | wincmd p | ene | endif "當沒指定文件時nerdtree自動打開                                              
map <C-n> :NERDTreeToggle<CR>                                                                                                                                                                                       
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif "當只剩下nerdtree時候vim自動退出                                                                              
                                                                                                                                                                                                                    
"==================YCM====================                                                                                                                                                                          
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'                                                                                                                                  
nnoremap <F12> :YcmCompleter GoToDefinitionElseDeclaration<CR>                                                                                                                                                      
                                                                                                                                                                                                                    
"================ultisnips================                                                                                                                                                                          
""Trigger configuration. Do not use <tab> if you use                                                                                                                                                                
"https://github.com/Valloric/YouCompleteMe.                                                                                                                                                                         
let g:UltiSnipsExpandTrigger="<c-o>"                                                                                                                                                                                
let g:UltiSnipsJumpForwardTrigger="<c-j>"                                                                                                                                                                           
let g:UltiSnipsJumpBackwardTrigger="<c-k>"                                                                                                                                                                          
                                                                                                                                                                                                                    
"================airlinae=================                                                                                                                                                                          
if !exists('g:airline_symbols')                                                                                                                                                                                     
  let g:airline_symbols = {}                                                                                                                                                                                        
endif                                                                                                                                                                                                               
let g:airline_left_sep = '»'                                                                                                                                                                                        
let g:airline_right_sep = '«'                                                                                                                                                                                       
let g:airline_symbols.crypt = ''                                                                                                                                                                                  
let g:airline_symbols.linenr = '☰'                                                                                                                                                                                  
let g:airline_symbols.maxlinenr = '㏑'                                                                                                                                                                              
let g:airline_symbols.branch = '⎇'                                                                                                                                                                                  
let g:airline_symbols.paste = 'ρ'                                                                                                                                                                                   
let g:airline_symbols.spell = 'Ꞩ'                                                                                                                                                                                   
let g:airline_symbols.notexists = 'Ɇ'                                                                                                                                                                               
let g:airline_symbols.whitespace = 'Ξ'                                                                                                                                                                              
                                                                                                                                                                                                                    
"================colorscheme==============                                                                                                                                                                          
colorscheme molokai  
# .vimogen_repos
https://github.com/Valloric/YouCompleteMe                                                            
https://github.com/SirVer/ultisnips.git                                                              
https://github.com/honza/vim-snippets.git                                                            
https://github.com/Shougo/neocomplete.vim                                                            
https://github.com/jiangmiao/auto-pairs                                                              
https://github.com/scrooloose/nerdtree                                                               
                                                                                                                                                                                                                   
https://github.com/airblade/vim-gitgutter                                                            
https://github.com/mhinz/vim-signify                                                                 
https://github.com/tpope/vim-fugitive                                                                
                                                                                                     
https://github.com/vim-airline/vim-airline                                                           
https://github.com/vim-airline/vim-airline-themes                                                    
https://github.com/Yggdroot/indentLine                                                               
https://github.com/flazz/vim-colorschemes       

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章