VIM = Python multi-version IDEphp
首先聲明,這是一次失敗的編譯經歷,僅供參考,歡迎討論。python
近期發現VIM是一個很棒的編輯器,簡潔高效。雖說上手速度較慢,可是它的種種特性依舊吸引了我。我打算試一試。接下來不幸發生了,個人電腦中已經安裝的環境有:git
Python27 64 bit (經過Anaconda2安裝)github
Python35 64 bit (經過官網可執行文件安裝)shell
然而,我從VIM官網下載的已經編譯好的最新版GVIM 1.7 卻固定支持了python27和python34 (關於固定支持版本的問題,請參考Github上的討論:Vim is unable to automatically detect my Python version )。最大的問題是,官網上的GVIM是32 bit的,根本沒法兼容64 bit的python。若是你在GVIM中敲入如下命令行:vim
:python print 1
你應該會看到這樣的錯誤提示:編輯器
E887: Sorry, this command is disabled, the Python's site module could not be loaded.
悲劇老是來的這麼忽然。還有什麼辦法呢,一來VIM是32 bit而個人python都是64 bit;二來VIM支持的python版本還不一致。因此,毅然決然,本身從源碼編譯一個GVIM。測試
須要用到的文件以下:this
MingGW : 官網選擇適合本身的版本下載。因爲個人電腦上已經安裝了Git,因此我選的是mingw-13.5-without-git.exe插件
VIM 源碼 : 既然已經有了Git,咱們能夠去VIM Github下載。參考代碼 git clone https://github.com/vim/vim.git
接下來,將源碼壓縮包解壓,我習慣去掉壓縮包名稱中的代碼倉庫分支名稱後綴(例如-master
),而且運行MingGW安裝包。若是你下載的也是without-git的輕便版本,那麼那個可執行程序其實一個壓縮包,運行以後就是自動解壓。
完成了上面的步驟以後,你應該會獲得一下的兩個文件夾,他們的大體目錄以下:
- MingGw | - open_distro_window.bat | - ... - vim | - src | - Make_ming.mak | - ... | - ...
請保證全部的目錄名稱中不包含中文字符以及空格!
接下來就是開始編譯了。首先運行上面目錄樹中的open_distro_window.bat。這其實就是MingGW的shell。而後切換目錄至Make_ming.mak所在的文件夾,執行如下命令:
make.exe -f Make_ming.mak IME=yes GUI=yes OLE=yes MBYTE=yes ARCH=x86-64 FEATURES=HUGE PYTHON="[Python2安裝目錄]" PYTHON_VER=[Python2的版本,例如27] PYTHON3="[Python3安裝目錄]" PYTHON3_VER=[Python3的版本,例如35] USERNAME=[任意,能夠寫你的名字] USERDOMAIN=[郵箱地址] gvim.exe
上面代碼中的各個參數是會影響到你的編譯結果的,具體的請看以後的分析。我猜測這可能和個人失敗有關。
接下來,MingGW shell就會有一大堆的輸出文字。不出意外的話,編譯成功以後,你會在src
目錄下找到一個gvim.exe
文件,這就是你編譯出來的VIM了,你的專屬VIM。走到這一步仍是頗有成就感的。
你能夠運行你的VIM,基本上和網上編譯好的release版本差很少。可是,有如下幾點緣由,讓我認爲此次的編譯是失敗的:
能夠成功運行:python3 print('Whatever you want')
,可是依舊沒法運行:python print('OMG')
。顯示的error和以前的是同樣的。
VIM編譯器的一些基本操做仍是和release版本不太同樣,例如當命令行輸出結果不少的時候不可以利用j,k進行上下翻頁;或者在insert模式下退格操做的時候,被刪除的文字沒有當即消失,而是等到進入normal模式的時候才消失。
首先說說多版本的問題。從測試來看,貌似已經支持了python3,可是很奇怪的是python2卻沒法運行了。之前也聽人說過VIM不可以同時支持多版本的python,我還不相信,難道真的是這樣。VIM的確不可以同時支持Python34和35,可是理論上應該是能夠支持一個2X和一個3X的。個人理由是,若是VIM不支持多版本的python,那麼若是我在VIM中運行命令行:version
,輸出信息中會有+ python/dyn + python3/dyn
呢?這不就是說明了支持2X和3X的版本麼?
而後討論關於以前說的命令行參數問題。請看:
MBYTE=yes
若是加上這個參數設置,能夠實現VIM多行命令信息輸出時候的j,k上下翻頁,不加的話,多行命令輸出的時候,上部分的超出屏幕的信息就看不到了。
ARCH=x86-64
若是加上這個參數設置,最後編譯出來的VIM就是64 bit。我嘗試了若是不加,編譯的時候會報錯,內容大概是CPU選擇錯誤。
GUI=yes
設置爲yes
,編譯結果是GUI VIM,no
則表明VIM。這個好理解。
還有其餘的參數:IME
, OLE
, FEATURES
, DYNAMIC_PYTHON
, DYNAMIC_PYTHON3
, CSCOPE
, DEBUG
,這些參數表明了什麼意思呢?是否是若是我可以找到官方release版本在編譯時候的參數配置,我就可以編譯出一個和release版本如出一轍的VIM呢?
最後總結一下,這也許就是開源軟件的一個特色吧,我不想用「弊端」這個詞語。只是,有的時候,可能不可以追求太完美的配置了。暫時先放下,之後有機會了繼續研究。
VIM的確不是一個容易上手的編輯器,因此我打算長時間的調教個人VIM。後來,爲了打造本身的Python IDE,由於暫時沒法使用Youcompleteme,我使用了兩個替代插件:
omni completion : VIM自帶的補全插件
pydiction : 一個邊帶比較久遠的python補全插件
怎麼說呢,這兩個插件的原理都是同樣,都是經過搜索匹配模式進行搜索,omni主要是搜索已打開文件中的匹配模式,而pydiction,顧名思義,是在一個目標文件(python diction)中搜索匹配模式。因此不少人噴,確實也算不上智能匹配。和YCM相比仍是差遠了。
5/14/2016