從上週開始我就開始折騰 ,搞了一下 Vim IDE for Python & Go,我將整個搭建的過程整理成本篇文章分享出來,本篇是 Python 版本的保姆級教程,實際上我還寫了 Go 版本的,有想看的可以本篇文章點個贊,我下篇就發
一說到 IDE,總有人會因 which one is 世界上最好的編輯工具 而吵得不可開交,但本文不會涉及、也不想誤導大家,我相信不同的人、不同的使用場景都有著有不同的最優解,世界上沒有一招通吃的編輯器。
如果是在桌面端,PyCharm 和 VS Code 已經做得足夠優秀,很難再有第三個編輯器可以與之匹敵。
但若要說在服務端?似乎沒得選,Vim 幾乎是你唯一的選擇。
Vim 是極具生產力的工具,甚至在某些人的眼中,它是一個魔鬼般的編輯器,之所以這麼說,是因為它的上手門檻極高,學習曲線非常的陡。
一是,它是針對程式設計師群體的專有編譯器,你需要額外學習並理解它的設計理念,並且需要記住非常多複雜的操作指令。
二是,對於工程專案程式碼,它並不是一個開箱即用的編輯器,需要你安裝大量的外掛、進行大量的配置才能成為一個稱手的 IDE 工具。
之所以,我使用 Vim 作為開發的工具,原因有四:
- 直接:正常本地 IDE 編碼完後,要上傳遠端服務端進行編譯及測試,比較麻煩,我直接在 SSH 服務端進行編碼更為直接。
- 省心:多種語言不用再安裝多個專有的編輯器,比如 PyCharm、Goland 等,而且不用再為各種付費軟體破解勞心費力。
- 方便:提高 iPad 的生產力,外出不帶電腦也可以線上寫程式碼,省得每次都帶個重重的電腦。
- 裝逼:你不覺得挺酷的嗎?(逃...
如果你對 Vim 操作一無所知,那麼請先去了解一下 Vim 的日常使用方法,否則以下內容並不適合你。
1. 準備工作
本文是在 Mac 環境下進行操作演示的,但同樣適用於 Linux 環境(少許差異,我會在相應位置點出),如果你只有 Windows 系統,可以使用 GVim。
在開始安裝配置之前,先說一下本文的一個整體思路:
- 準備執行環境:安裝 Python 或者 Go 環境
- 準備Vim 版本:使用 Vim 8.2 的最高版本
- 外掛安裝環境:外掛都在 Github 及其他外網,需要你配置一些代理
- 外掛安裝:一鍵批量安裝外掛
- 外掛配置:外掛安裝上後,要進行一些配置才能好用
- 外掛使用:演示每個外掛的使用方法
2. 準備執行環境
Vim 原生對 Python 提供了支援,當你安裝 8.2 版本的 Vim 時,會自動安裝 Python ,只不過該安裝版本並不是你需要的版本,不過不要緊,Vim 執行使用的 Python 版本是可以配置的。
我這邊使用的版本是 Python 3.10.0
$ python3 --version
Python 3.10.0
3. 安裝/升級 Vim 8.2
正常的 Mac 或者 Linux 機器都會自帶 Vim 工具,只不過可能版本比較低,如果使用這些版本的 Vim ,後面有些外掛會安裝不上或者使用不了,就比如 YouCompleteMe
這個非常重要的外掛,如果你不使用 Vim 8.1+ ,你每次用 vim 都會提示你,非常影響體驗
$ vim main.go
YouCompleteMe unavailable: requires Vim 8.1.2269+.
Press ENTER or type command to continue
這些外掛已經持續更新了很多年,對於老版的 Vim 不再提供支援這也可以理解。
如果你使用的 Linux ,整個過程會順暢很多,在這裡我使用的是 CentOS 7.6 的 Linux。
首先找到系統裡安裝的 vim 包有哪些,然後使用 yum remove
去解除安裝它
[root@iswbm ~]# yum list installed | grep -i vim
vim-common.x86_64 2:7.4.629-8.el7_9 @updates
vim-enhanced.x86_64 2:7.4.629-8.el7_9 @updates
vim-filesystem.x86_64 2:7.4.629-8.el7_9 @updates
vim-minimal.x86_64 2:7.4.629-8.el7_9 @updates
[root@iswbm ~]#
[root@iswbm ~]# yum remove vim-common vim-enhanced vim-filesystem vim-minimal
後面我會使用原始碼編譯的方法去安裝 Vim 8.2,但編譯需要安裝如下這些基礎依賴
[root@iswbm ~]# yum install -y gcc make ncurses ncurses-devel
[root@iswbm ~]# yum install ctags git tcl-devel \
ruby ruby-devel \
lua lua-devel \
luajit luajit-devel \
python python-devel \
perl perl-devel \
perl-ExtUtils-ParseXS \
perl-ExtUtils-XSpp \
perl-ExtUtils-CBuilder \
perl-ExtUtils-Embed
從 Github 上下載原始碼
git clone https://github.com/vim/vim.git
進入 vim/src
目錄執行如下三個命令編譯安裝
[root@iswbm ~]# ./configure --prefix=/usr/local/vim \
--enable-pythoninterp=yes \
--enable-python3interp=yes \
--with-python-command=python \
--with-python3-command=python3
[root@iswbm ~]# make && make install
[root@iswbm ~]#
不出意外的話,命令執行完成後,你只要再配置個軟體連結,就可以正常使用 8.2 版本的 Vim 了。
[root@iswbm ~]# ln -s /usr/local/vim/bin/vim /usr/bin/vim
[root@iswbm src]# vim --version | head -n 1
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 19 2021 22:05:46)
4. 外掛安裝
Vim 本身提高的功能已經非常強大,但無奈上手難度實在太大,安裝一些定製化的外掛,能讓整個 Vim 介面管理與使用更加符合人類的直覺,降低使用門檻。
具體要安裝哪些外掛,還要是看你想把 Vim 打造成什麼樣子?
這個倒不必悶著頭空想,對照著桌面端的 IDE 軟體去抄作業就 OK 了嘛。
對於我個人來說,我日常使用 IDE 最多的功能有:
- 自動程式碼補全
- 程式碼追蹤跳轉
- 靜態程式碼檢查
- 執行除錯程式碼
- 全域性搜尋程式碼
- 專案程式碼書籤
- 程式碼版本管理
- 程式碼高亮顯示
- 工程專案的檔案樹
- 單檔案程式碼結構樹
- 可同時開啟多檔案
- Markdown 實時預覽
那我就對照這個功能去找對應的外掛即可
- YouCompleteMe:提供自動程式碼補全與程式碼追蹤跳轉
- auto-pairs:自動補全括號的外掛,包括小括號,中括號,以及花括號
- NERDTree:提供工程專案的檔案樹、支援書籤功能
- vim-nerdtree-tabs:可以開啟多個程式碼檔案,使 nerdtree 的 tab 更加友好些
- nerdtree-git-plugin:可以在導航目錄中看到 git 版本資訊
- tagbar:可以檢視當前程式碼檔案中的變數和函式列表的外掛,並切換和跳轉到程式碼中對應的變數和函式的位置
- vim-airline:Vim狀態列外掛,包括顯示行號,列號,檔案型別,檔名,以及Git狀態
- vim-gitgutter:可以在文件中顯示 git 資訊
- vim-one:程式碼配色方案
- markdown-preview.vim:Markdown 預覽支援
- mathjax-support-for-mkdp:Markdown 數學公式預覽支援
- vim-godef:go 中的程式碼追蹤,輸入 gd 就可以自動跳轉
- fatih/vim-go:靜態檢查等一系列 go 相關工具
- ultisnips / vim-snippets:自動生成 程式碼塊
那麼如何安裝這些外掛呢?
很簡單,你只要使用 vi 在你的 ~/.vimrc
檔案中,貼入下面這段配置到檔案末尾
" 外掛開始的位置
call plug#begin('~/.vim/plugged')
" 程式碼自動完成,安裝完外掛還需要額外配置才可以使用
Plug 'ycm-core/YouCompleteMe'
" 用來提供一個導航目錄的側邊欄
Plug 'scrooloose/nerdtree'
" 可以使 nerdtree 的 tab 更加友好些
Plug 'jistr/vim-nerdtree-tabs'
" 可以在導航目錄中看到 git 版本資訊
" Plug 'Xuyuanp/nerdtree-git-plugin'
" 檢視當前程式碼檔案中的變數和函式列表的外掛,
" 可以切換和跳轉到程式碼中對應的變數和函式的位置
" 大綱式導航, Go 需要 https://github.com/jstemmer/gotags 支援
Plug 'preservim/tagbar'
" 自動補全括號的外掛,包括小括號,中括號,以及花括號
Plug 'jiangmiao/auto-pairs'
" Vim狀態列外掛,包括顯示行號,列號,檔案型別,檔名,以及Git狀態
Plug 'vim-airline/vim-airline'
" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
" 可以快速對齊的外掛
Plug 'junegunn/vim-easy-align'
" 可以在文件中顯示 git 資訊
Plug 'airblade/vim-gitgutter'
" markdown 外掛
Plug 'iamcco/mathjax-support-for-mkdp'
Plug 'iamcco/markdown-preview.vim'
" 下面兩個外掛要配合使用,可以自動生成程式碼塊
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
" go 主要外掛
Plug 'fatih/vim-go', { 'tag': '*' }
" go 中的程式碼追蹤,輸入 gd 就可以自動跳轉
Plug 'dgryski/vim-godef'
" 可以在 vim 中使用 tab 補全
"Plug 'vim-scripts/SuperTab'
" 可以在 vim 中自動完成
"Plug 'Shougo/neocomplete.vim'
" 外掛結束的位置,外掛全部放在此行上面
call plug#end()
然後輸入命令 :wq
儲存並退出 vi。
安裝外掛的管理工具有很多,比如 Vundle,vim-plug 等。
Vundle是一款非常出名且歷史悠久的Vim外掛管理工具。但隨著安裝的vim外掛越來越多,使用Vundle來管理這些外掛時效率變得越來越低,vim啟動耗時也越來越大。
而vim-plug是一款非常輕量又高效的vim外掛管理工具。它支援全非同步、多執行緒並行安裝外掛,支援git分支、標籤等,可以對外掛進行回滾更新、還支援按需載入外掛(On-demand loading),可以指定對特定檔案型別載入對應vim外掛,大大加快了vim啟動時間。
因此我這裡會使用 vim-plug 這個管理工具,使用如下命令就可以安裝 vim-plug
外掛管理工具
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
接著請重啟一下你的終端,保證重新初始化,不然等你後面執行 PlugInstall
的時候, 有可能報該命令不存在。
Not an editor command: PlugInstall
重啟完終端後,輸入再次開啟 vim
輸入 :PlugInstall
開始安裝過程
如果你沒有網路問題(不就科學那點事嘛),那麼安裝會很順利。。
輸入 :PlugStatus
就會看到所有的外掛都安裝 OK。
5. YouCompleteMe
上面的外掛安裝,其實做的事情也比較簡單,就是把 Github 上的倉庫拉取到本地的 ~/.vim/plugged
目錄
一般情況下,這些外掛都是開箱即用的,不會有複雜的依賴,但唯獨一個外掛比較特殊 ,它就是 YouCompleteMe
,它號稱是最難安裝的 Vim 外掛。
我在本地的 Mac 機器上裝了兩個晚上,才算把所有的依賴都解決完成,但在 Linux 上就比較順利。
具體的安裝步驟是
- 進入
~/.vim/plugged/YouCompleteMe
外掛目錄,修改.gitmodules
中的 github.com 為 映象網站 hub.fastgit.org - 然後安裝一級依賴:
git submodule update --init
- 一級依賴正確安裝後,再修改
third_party/ycmd
目錄下所有依賴的.gitmodules
中的 github.com 為 映象網站 hub.fastgit.org - 然後遞迴安裝其依賴包:
git submodule update --init --recursive
- 最後執行
python3 install.py --all
,--all 會安裝該外掛支援的所有語言功能。
在 Mac 上安裝的過程中,遇到了相當多的問題,還涉及到了改 YouComplete 的程式碼,最後才得以正常安裝下去,可能你在安裝的過程中也會遇到類似的問題,如果有問題,歡迎在評論區留言,我會盡力解答。
6. 設定映象代理
上面安裝外掛的過程其實會去 Github 上下載對應的外掛,但由於各種不可描述的原因, 在大陸的伺服器上訪問 github 是非常慢,甚至是不能訪問的。
我在沒有進行任何網路設定的情況下, 20 個外掛,居然沒有一個安裝成功。
因此在這裡,你得先想辦法,讓你的伺服器能訪問以正常速度訪問 Github,至於怎麼做,有些黑科技我這裡不方便展開細說,就給大家介紹一種可以公開、又非常有效的方法。
修改 ~/.vim/autoload/plug.vim
將
let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git')
改成
let fmt = get(g:, 'plug_url_format', 'https://git::@hub.fastgit.org/%s.git')
將這行
\ '^https://git::@github\.com', 'https://github.com', '')
改成
\ '^https://git::@hub.fastgit\.org', 'https://hub.fastgit.org', '')
然後再進入 vim 執行 :PlugInstall
就可以了
7. 外掛使用
大部分外掛安裝好後,可以立馬使用,但有一些外掛需要再進行一些配置才能用得更稱手。
由於配置非常多,我這裡就不直接貼出來了,有感興趣的加我v:hello-wbm,找我要一下配置表。
YouComplete
使用 IDE 最基本的訴求,不就是能夠在你編碼的時候,自動給出提示,然後自動補全嘛,vim 有了 YouComplete 的加持後,也可以 100% 還原桌面端的編碼體驗。
NERDTree
開啟檔案後,使用 F9 或者輸入 NERDTreeToggle
就會開啟側邊欄的檔案樹,這是 NERDTree
給我們提供的便利。
tagbar
開啟 Python 檔案後,使用 F9 或者輸入 :tagbar
就可以開啟 tagbar
視窗,在這個視窗裡你可以看到該檔案的所有結構體、函式、變數等,這些通通可以稱做 tag,當你定位到某個 tag 時,直接回車就可以跳轉到左邊程式碼視窗的位置。
vimgrep
vimgrep 可用於工程專案的程式碼查詢,對於經常閱讀原始碼的同學是必不可少的利器,它是 Vim 自帶的工具,非常之強大。
用完 vimgrep 查詢後,正常情況下,不會有任何的反饋,如果你需要檢視搜尋的結果,並跳轉到對應的位置,可以使用 QuickFix ,只要輸入 :cw
或者 :copen
8. 執行程式碼
使用 Vim 寫完程式碼後,想像 PyCharm 一樣直接快捷鍵執行程式碼,需要你在 .vimrc
中寫入如下的配置。
這段配置,不僅包括 Python ,還有 Bash 和 Golang
" F5 to run sh/python3
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'sh'
:!time bash %
elseif &filetype == 'python'
exec "!time python3 %"
elseif &filetype == 'go'
exec "!time go run %"
endif
endfunc
配置完後,使用 F5
就可以直接執行當前的指令碼。
9. 在 iPad 上寫程式碼
如果你和我一樣,有自己的伺服器,那麼你根據上面的步驟把 Vim 配置好後,就可以在 iPad 上通過 SSH 連線伺服器進行程式碼的編寫了。
如果你沒有伺服器,只要可以加我v: hello-wbm,我就送你一臺一年期的阿里雲伺服器,名額有限,我只能說先到先得。
剛好我手上有一臺 2020 款的 iPad Pro,平時也是用來視訊居多,實在有點對不起 Pro 這個配置,有了 Vim 這個神器,生產力 up 了一點點。。
10. 寫在最後
有必要說明一下,之所以花了五天這麼長的時間,其實我是把我手上的幾臺電腦,包括伺服器全部配置了 Vim IDE,不同的機器,遇到的問題都有點不太一樣,其中在我的 Mac 上,遇到的問題最多,折騰的時間最長,其中有些問題,我 Google 不到答案,最後是看了程式碼,修改了部分程式碼才跑下去的。
另外,對於 Vim 來說,最重要的就是 .vimrc 檔案,上面的講解可能我會漏了一些配置講解,如果你發現使用不是那麼順利,可以下載我的 .vimrc 檔案:https://wwe.lanzoui.com/i9gD5...
本文是 Python 版本的 Vim IDE 搭建指南,程式碼演示也基本是用的是 Python 程式碼,根據文中我的思路一步一步操作,你可以搭建屬於自己的一套線上 IDE 環境。
我不僅寫 Python 程式碼,還寫一些 Go 的程式碼, Vim 對於 Python 原生提供了比較多的支援,而相比之下,Go 卻要安裝更多的外掛才能達到不錯的編碼體驗,但由於本號大多數是 Python 開發者,這一部分內容,我會再寫一篇 Vim for Go 的文章。感興趣的朋友給我可以給我評論區說一下,我會發給你地址。
好了,以上就是本篇文章的全部內容,如在安裝配置上有任何疑問,歡迎評論區指出~
原文首發於個人部落格:https://iswbm.com/591.html
文章的最後,插播一個福利
雙十一快到了,阿里雲也開始搞活動了,剛好我這邊可以帶大家白Piao 阿里雲的伺服器。
說白了就是大家 可以一分錢不花,就可以領到伺服器,規格是 2c2m(2vcpu 2G memory) 的機器。
昨天在朋友圈發了下,現在已經有 400 人報名參與了,今天借這篇文章再說一下,有想參加的朋友,可以加我v(hello-wbm),帶大家一起薅羊毛。
絮叨一下
我在 SegmentFault 上寫過很多的 Python 相關文章,其中包括 Python 實用工具,Python 高效技巧,PyCharm 使用技巧,很高興得到了很多知乎朋友的認可和支援。
在他們的鼓勵之下,我將過往文章分門別類整理成三本 PDF 電子書
PyCharm 中文指南
《PyCharm 中文指南》使用 300 多張 GIF 動態圖的形式,詳細講解了最貼合實際開發的 105個 PyCharm 高效使用技巧,內容通俗易懂,適合所有 Python 開發者。
線上體驗地址:https://pycharm.iswbm.com
Python 黑魔法指南
《Python黑魔法指南》目前迎來了 v3.0 的版本,囊集了 100 多個開發小技巧,非常適合在閒時進行碎片閱讀。
線上體驗地址:https://magic.iswbm.com
Python 中文指南
學 Python 最好的學習資料永遠是 Python 官方文件,可惜現在的官方文件大都是英文,雖然有中文的翻譯版了,但是進度實在堪憂。為了照顧英文不好的同學,我自己寫了一份 面向零基礎的朋友 的線上 Python 文件 -- 《Python中文指南》
線上體驗地址:https://python.iswbm.com
有幫助的話,記得幫 點個贊喲~