Vim擴展YouCompleteMe插件

在Vim中安裝YouCompleteMe插件php

 

1、安裝前的說明:css

一、確保vim版本>=7.4,若MAC OS,建議直接安裝MacVim(8.0版本)。html

ps:若是不想使用MacVim的GUI,但是使用命令行模式:python

alias vim='/Volumes/Mac\ OS/Applications/MacVim.app/Contents/MacOS/Vim'

二、安裝Vundle:linux

Vundle是用來管理vim插件的工具,能夠方便的經過它安裝或者卸載vim插件。 git

三、Jedi:支持Python語法提示、補全github

2、安裝:shell

一、安裝Vundle:數據庫

1.一、先去github上下載:編程

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

1.二、安裝:

打開vim,輸入 :PluginInstall 回車便可。

 

二、安裝YouCompleteMe:

2.一、編輯用戶家目錄下.vimrc文件(若沒有,可直接建立),內容以下:

set nocompatible              
filetype off                  

set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

Plugin 'VundleVim/Vundle.vim'

Bundle 'Valloric/YouCompleteMe'

call vundle#end()           
filetype plugin indent on   
~                                         

 

2.二、打開vim,輸入:BundleInstall回車後會自動加載YouCompleteMe

其中報錯以下:

  error: RPC failed; curl 56 SSLRead() return error -9806
  fatal: The remote end hung up unexpectedly
  fatal: early EOF
  fatal: index-pack failed

curl獲取數據時失敗。

解決以下:

$ brew remove git
$ brew remove curl

$ brew install openssl
$ brew install --with-openssl curl
$ brew install --with-brewed-curl --with-brewed-openssl git

 而後繼續vim中輸入:BundleInstall 回車便可。

2.三、編譯安裝:

/Users/ahaii/.vim/bundle/YouCompleteMe
./install.py

三、安裝Jedi:

pip install jedi

vim加載jedi模塊:

vim ~/.vimrc

Plugin 'davidhalter/jedi-vim'

而後vim中:BundleInstall

 

以上主要插件安裝完成後,就能夠配置vim擴展了,具體功能樣式請參考以下:(出處:https://segmentfault.com/a/1190000003962806)

本文由編程派-EarlGrey翻譯,原文出自realpython,是Vim的愛好者專門針對利用Sublime Text 3設置Python IDE一文所寫。譯者本人也是依照Sublime Text那篇文章配置的開發環境,但一直對Vim做爲神器的美名很是仰慕,又看到了一篇這麼全面的配置文章,以爲有必要翻譯過來與你們分享,想必能夠省卻不少本身研究如何配置的時間。

我注意到,有人在realpython.com宣揚Sublime Text 3。做爲公司的資深開發人員(呃,也就是老古董),我以爲有義務介紹一個真正的Python開發環境給你們——我要推薦的固然就是Vim了。不錯,Vim編輯器無處不在,速度快,歷來不會崩潰。而且,它能作任何事情!

不過,不利之處也有,就是Vim配置起來很讓人頭疼。可是,別擔憂,本文將告訴你如何配置一個強大的Vim環境,專門用於每天搗鼓Python開發。

下面是最終效果預覽。

若是想充分地利用好本文,你應該對如何使用Vim和它的命令模式至少有一個基本的瞭解。若是你是初學者,你能夠經過vim-adventure或者openvim網站學習。在繼續閱讀本文以前,請花點時間瀏覽那兩個網站的內容。

安裝

由於許多Unix衍生系統已經預裝了Vim,咱們首先要確認編輯器是否成功安裝:

vim --version

若是已經安裝了,你應該看到相似下面的文字:

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov  5 2014 21:00:28)
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
-arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
-conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs
-dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path
+find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv
+insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent
+listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape
-mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse
+mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg -osfiletype
+path_extra -perl +persistent_undo +postscript +printer -profile +python/dyn
-python3 +quickfix +reltime -rightleft +ruby/dyn +scrollbind +signs
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
 -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo
+vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp
 -xterm_clipboard -xterm_save
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe
Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses

在這一步,你要確保已經知足如下兩點要求:

  1. Vim編輯版本應該大於7.3。

  2. 支持Python語言。在所選編輯器的功能中,確保你看到了+python

若是知足上述要求,接下來能夠安裝Vim擴展了。若是不知足,則須要安裝/升級

OS X

若是沒有Homebrew,建議立刻安裝,並運行:

brew update
brew install vim

Unix衍生系統

Debian或Ubuntu系統,可使用下面的代碼:

sudo apt-get remove vim-tiny
apt-get update
apt-get install vim

若是是其餘版本的Linux系統,請查閱相應版本包管理器的文檔。不清楚的話,能夠先閱讀這篇文章:安裝Vim

Windows

Windows系統下安裝Vim有不少種方法。請查閱官方文檔

驗證安裝

確保你已經安裝了7.3版本以上、支持Python的Vim編輯器。你能夠再次運行vim --version進行確認。若是你想知道Vim中使用的Python版本,你能夠在編輯器中運行:python import sys; print(sys.version)

2.7.6 (default, Sep  9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]

這行命令會輸出你的編輯器當前的Python版本。若是報錯,那麼你的編輯器就不支持Python語言,須要重裝或從新編譯。

Vim編輯器安裝完成後,咱們來看看如何將其設置爲Python開發的強大環境。

Vim擴展

Vim自己可以知足開發人員的不少需求,可是它的可擴展性也極強,而且已經有一些殺手級的擴展,可讓Vim擁有「現代」集成開發環境的特性。因此,你所須要的第一件東西就是一個好用的擴展管理器。

Vim的擴展一般也被成爲bundle或插件

Vundle

Vim有多個擴展管理器,可是咱們強烈推薦Vundle。你能夠把它想象成Vim的pip。有了Vundle,安裝和更新包這種事情不費吹灰之力。

咱們如今來安裝Vundle:

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

該命令將下載Vundle插件管理器,並將它放置在你的Vim編輯器bundles文件夾中。如今,你能夠經過.vimrc配置文件來管理全部擴展了。

將配置文件添加到你的用戶的home文件夾中:

touch ~/.vimrc

接下來,把下來的Vundle配置添加到配置文件的頂部:

set nocompatible              " required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

這樣,你就完成了使用Vundle前的設置。以後,你就能夠在配置文件中添加但願安裝的插件,而後打開Vim編輯器,運行下面的命令:

:PluginInstall

這個命令告訴Vundle施展它的魔法——自動下載全部的插件,併爲你進行安裝和更新。

對於Windows用戶,請查閱Windows安裝指南

開始打造IDE吧

本文不可能列舉Vim的所有功能,只能快速介紹一些Vim自帶的強大功能,它們對於Python開發來講是很是有用的。

扔掉鼠標

或許,Vim編輯器最重要的功能就是它不要求使用鼠標(除了GUI版本外)。一開始,你可能會以爲這是個很是糟糕的作法,可是隻要你投入時間——是的,這很花時間——學習快捷組合鍵,就能夠大幅提高工做流的速度。

分割佈局(Split Layouts)

使用:sv <filename>命令打開一個文件,你能夠縱向分割佈局(新文件會在當前文件下方界面打開),使用相反的命令:vs <filename>, 你能夠獲得橫向分割佈局(新文件會在當前文件右側界面打開)。

你還能夠嵌套分割佈局,因此你能夠在分割佈局內容再進行分割,縱向或橫向均可以,直到你滿意爲止。衆所周知,咱們開發時常常須要同時查看多個文件。

專業貼士:記得在輸入完:sv後,利用tab補全功能,快速查找文件。

專業貼士:你還能夠指定屏幕上能夠進行分割佈局的區域,只要在.vimrc文件中添加下面的代碼便可:

set splitbelow
set splitright

專業貼士:想要不使用鼠標就切換分割佈局嗎?只要將下面的代碼添加到.vimrc文件中,你就能夠經過快捷組合鍵進行切換。

"split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

組合快捷鍵:

  • Ctrl-j 切換到下方的分割窗口

  • Ctrl-k 切換到上方的分割窗口

  • Ctrl-l 切換到右側的分割窗口

  • Ctrl-h 切換到左側的分割窗口

換句話說, 按Ctrl+Vim的標準移動鍵,就能夠切換到指定窗口。

等等,nnoremap是什麼意思?——簡單來講,nnoremap將一個組合快捷鍵映射爲另外一個快捷鍵。一開始的n,指的是在Vim的正常模式(Normal Mode)下,而不是可視模式下從新映射。基本上,nnoremap <C-J> <C-W><C-j>就是說,當我在正常模式按下<C-J>時,進行<C-W><C-j>操做。更多信息請看這裏

緩衝區(Buffers)

雖然Vim支持tab操做,仍有不少人更喜歡緩衝區和分割佈局。你能夠把緩衝區想象成最近打開的一個文件。Vim提供了方便訪問近期緩衝區的方式,只須要輸入:b <buffer name or number>,就能夠切換到一個已經開啓的緩衝區(此處也可以使用自動補全功能)。你還能夠經過ls命令查看全部的緩衝區。

專業貼士: 在:ls命令輸出的最後,Vim會提示「敲擊Enter繼續查看」,這時你能夠直接輸入:b <buffer name>,當即選擇緩衝區。這樣能夠省掉一個按鍵操做,也沒必要去記憶緩衝區的名字。

代碼摺疊(Code Folding)

大多數「現代」集成開發環境(IDE)都提供對方法(methods)或類(classes)進行摺疊的手段,只顯示類或方法的定義部分,而不是所有的代碼。

你能夠在.vimrc中添加下面的代碼開啓該功能:

" Enable folding
set foldmethod=indent
set foldlevel=99

這樣就能夠實現,可是你必須手動輸入za來摺疊(和取消折疊)。使用空格鍵會是更好的選擇。因此在你的配置文件中加上這一行命令吧:

" Enable folding with the spacebar
nnoremap <space> za

如今你能夠輕鬆地隱藏掉那些當前工做時不須要關注的代碼了。

第一個命令,set foldmethod=ident會根據每行的縮進開啓摺疊。可是這樣作會出現超過你所但願的摺疊數目。可是別怕,有幾個擴展就是專門解決這個問題的。在這裏,咱們推薦SimplyFold。在.vimrc中加入下面這行代碼,經過Vundle進行安裝:

Plugin 'tmhedberg/SimpylFold'

不要忘記執行安裝命令::PluginInstall

專業貼士: 但願看到摺疊代碼的文檔字符串?

let g:SimpylFold_docstring_preview=1

Python代碼縮進

固然,想要代碼摺疊功能根據縮進狀況正常工做,那麼你就會但願本身的縮進是正確的。這裏,Vim的自帶功能沒法知足,由於它實現不了定義函數以後的自動縮進。咱們但願Vim中的縮進能作到如下兩點:

  • 首先,縮進要符合PEP8標準。

  • 其次,更好地處理自動縮進。

PEP8

要支持PEP8風格的縮進,請在.vimrc文件中添加下面的代碼:

au BufNewFile,BufRead *.py
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set autoindent
\ set fileformat=unix

這些設置將讓Vim中的Tab鍵就至關於4個標準的空格符,確保每行代碼長度不超過80個字符,而且會以unix格式儲存文件,避免在推送到Github或分享給其餘用戶時出現文件轉換問題。

另外,對於全棧開發,你能夠設置針對每種文件類型設置au命令:

au BufNewFile,BufRead *.js, *.html, *.css
\ set tabstop=2
\ set softtabstop=2
\ set shiftwidth=2

自動縮進

自動縮進有用,可是在某些狀況下(好比函數定義有多行的時候),並不老是會達到你想要的效果,尤爲是在符合PEP8標準方面。咱們能夠利用indentpython.vim插件,來解決這個問題:

Plugin 'vim-scripts/indentpython.vim'

標示沒必要要的空白字符

咱們但願避免出現多餘的空白字符。可讓Vim幫咱們標示出來,使其很容易發現並刪除。

au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/

這會將多餘的空白字符標示出來,極可能會將它們變成紅色突出。

支持UTF-8編碼

大部分狀況下,進行Python開發時你應該使用UTF-8編碼,尤爲是使用Python 3的時候。確保Vim設置文件中有下面的命令:

set encoding=utf-8

自動補全

支持Python自動補全的最好插件是YouCompleteMe。咱們再次使用Vundle安裝:

Bundle 'Valloric/YouCompleteMe'

YouCompleteMe插件其實底層使用了一些不一樣的自動補全組件(包括針對Python開發的Jedi),另外要安裝一些C庫才能正常工做。插件官方文檔提供了很好的安裝指南,我就不在這裏重複了。切記跟隨文檔的步驟進行安裝。

安裝完成後,插件自帶的設置效果就很好,可是咱們還能夠進行一些小的調整:

let g:ycm_autoclose_preview_window_after_completion=1
map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>

上面的第一行確保了在你完成操做以後,自動補全窗口不會消失,第二行則定義了「轉到定義」的快捷方式。

支持Virtualenv虛擬環境

上面「轉到定義」功能的一個問題,就是默認狀況下Vim不知道virtualenv虛擬環境的狀況,因此你必須在配置文件中添加下面的代碼,使得Vim和YouCompleteMe可以發現你的虛擬環境:

"python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
  project_base_dir = os.environ['VIRTUAL_ENV']
  activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
  execfile(activate_this, dict(__file__=activate_this))
EOF

這段代碼會判斷你目前是否在虛擬環境中編輯,而後切換到相應的虛擬環境,並設置好你的系統路徑,確保YouCompleteMe可以找到相應的site packages文件夾。

語法檢查/高亮

經過安裝syntastic插件,每次保存文件時Vim都會檢查代碼的語法:

Plugin 'scrooloose/syntastic'

還能夠經過這個小巧的插件,添加PEP8代碼風格檢查:

Plugin 'nvie/vim-flake8'

最後,讓你的代碼變得更漂亮:

let python_highlight_all=1
syntax on

配色方案

配色方案能夠和你正在使用的基礎配色共同使用。GUI模式能夠嘗試solarized方案, 終端模式能夠嘗試Zenburn方案

Plugin 'jnurmine/Zenburn'
Plugin 'altercation/vim-colors-solarized'

接下來,只須要添加一點邏輯判斷,肯定什麼模式下使用何種方案就能夠了:

if has('gui_running')
  set background=dark
  colorscheme solarized
else
  colorscheme Zenburn
endif

Solarized方案同時提供了暗色調和輕色調兩種主題。要支持切換主題功能(按F5)也很是簡單,只需添加:

call togglebg#map("<F5>")

文件瀏覽

若是你想要一個不錯的文件樹形結構,那麼NERDTree是不二之選。

Plugin 'scrooloose/nerdtree'

若是你想用tab鍵,能夠利用vim-nerdtree-tabs插件實現:

Plugin 'jistr/vim-nerdtree-tabs'

還想隱藏.pyc文件?那麼再添加下面這行代碼吧:

let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree

超級搜索

想要在Vim中搜索任何文件?試試ctrlP插件吧:

Plugin 'kien/ctrlp.vim'

正如插件名,按Ctrl+P就能夠進行搜索。若是你的檢索詞與想要查找的文件相匹配的話,這個插件就會幫你找到它。哦,對了——它不只僅能夠搜索文件,還能檢索標籤!更多信息,能夠觀看這個Youtube視頻.

顯示行號

開啓顯示行號:

set nu

Git集成

想要在Vim中執行基本的Git命令?vim-fugitive插件則是不二之選。

Plugin 'tpope/vim-fugitive'

請看Vimcasts的這部視頻,瞭解更多狀況。

Powerline狀態欄

Powerline是一個狀態欄插件,能夠顯示當前的虛擬環境、Git分支、正在編輯的文件等信息。

這個插件是用Python編寫的,支持諸如zsh、bash、tmux和IPython等多種環境。

Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}

請查閱插件的官方文檔,瞭解配置選項。

系統剪貼板

一般Vim會忽視系統剪貼板,而使用自帶的剪貼板。可是有時候你想從Vim以外的程序中剪切、複製、粘貼文本。在OS X平臺上,你能夠經過這行代碼訪問你的系統剪貼板:

set clipboard=unnamed

Shell開啓Vim編輯模式

最後,當你熟練掌握了Vim和它的鍵盤快捷方式以後,你會發現本身常常由於shell中缺少相同的快捷鍵而懊惱。不要緊,大部分的shell程序都有Vi模式。在當前shell中開啓Vi模式,你只須要在~/.inputrc文件中添加這行代碼:

set editing-mode vi

如今,你不只能夠在shell中使用Vim組合快捷鍵,還能夠在Python解釋器以及任何利用GNU Readline程序的工具(例如,大多數的數據庫shell)中使用。如今,你在什麼地方均可以使用Vim啦!

結語

Vim的設置到這裏就差很少了(至少對於Python開發來講是這樣的)。固然,開源世界裏還有大量你可使用的其餘擴展,以及本文中所提到插件的替代品。你最喜好的擴展是什麼?你又是如何將Vim設置符合你喜愛的?

這是我本人的Vim配置文件連接。你有沒有本身的設置代碼?請與咱們分享!

謝謝!

資源

  1. Vim Tutor是Vim自帶的程序,安裝結束以後,只要在命令行輸入vimtutor便可,程序將會用Vim編輯器教你如何使用Vim。

  2. Vimcasts是一系列的高階視頻教程,內容涉及許多Vim的功能。

  3. Vim官方文檔

  4. Open Vim

  5. 笨辦法學Vimscript是學習vimscript的極好材料。

相關文章
相關標籤/搜索