保姆級教程!將 Vim 打造一個 IDE (Python 篇)

Python程式設計時光發表於2021-10-31

從上週開始我就開始折騰 ,搞了一下 Vim IDE for Python & Go,我將整個搭建的過程整理成本篇文章分享出來,本篇是 Python 版本的保姆級教程,實際上我還寫了 Go 版本的,有想看的可以本篇文章點個贊,我下篇就發

效果圖

一說到 IDE,總有人會因 which one is 世界上最好的編輯工具 而吵得不可開交,但本文不會涉及、也不想誤導大家,我相信不同的人、不同的使用場景都有著有不同的最優解,世界上沒有一招通吃的編輯器。

如果是在桌面端,PyCharm 和 VS Code 已經做得足夠優秀,很難再有第三個編輯器可以與之匹敵。

但若要說在服務端?似乎沒得選,Vim 幾乎是你唯一的選擇。

Vim 是極具生產力的工具,甚至在某些人的眼中,它是一個魔鬼般的編輯器,之所以這麼說,是因為它的上手門檻極高,學習曲線非常的陡。

一是,它是針對程式設計師群體的專有編譯器,你需要額外學習並理解它的設計理念,並且需要記住非常多複雜的操作指令。

二是,對於工程專案程式碼,它並不是一個開箱即用的編輯器,需要你安裝大量的外掛、進行大量的配置才能成為一個稱手的 IDE 工具。

之所以,我使用 Vim 作為開發的工具,原因有四:

  1. 直接:正常本地 IDE 編碼完後,要上傳遠端服務端進行編譯及測試,比較麻煩,我直接在 SSH 服務端進行編碼更為直接。
  2. 省心:多種語言不用再安裝多個專有的編輯器,比如 PyCharm、Goland 等,而且不用再為各種付費軟體破解勞心費力。
  3. 方便:提高 iPad 的生產力,外出不帶電腦也可以線上寫程式碼,省得每次都帶個重重的電腦。
  4. 裝逼:你不覺得挺酷的嗎?(逃...

如果你對 Vim 操作一無所知,那麼請先去了解一下 Vim 的日常使用方法,否則以下內容並不適合你。

1. 準備工作

本文是在 Mac 環境下進行操作演示的,但同樣適用於 Linux 環境(少許差異,我會在相應位置點出),如果你只有 Windows 系統,可以使用 GVim。

在開始安裝配置之前,先說一下本文的一個整體思路:

  1. 準備執行環境:安裝 Python 或者 Go 環境
  2. 準備Vim 版本:使用 Vim 8.2 的最高版本
  3. 外掛安裝環境:外掛都在 Github 及其他外網,需要你配置一些代理
  4. 外掛安裝:一鍵批量安裝外掛
  5. 外掛配置:外掛安裝上後,要進行一些配置才能好用
  6. 外掛使用:演示每個外掛的使用方法

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 上就比較順利。

具體的安裝步驟是

  1. 進入 ~/.vim/plugged/YouCompleteMe 外掛目錄,修改 .gitmodules 中的 github.com 為 映象網站 hub.fastgit.org
  2. 然後安裝一級依賴:git submodule update --init
  3. 一級依賴正確安裝後,再修改 third_party/ycmd 目錄下所有依賴的.gitmodules 中的 github.com 為 映象網站 hub.fastgit.org
  4. 然後遞迴安裝其依賴包:git submodule update --init --recursive
  5. 最後執行 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

有幫助的話,記得幫 點個贊喲~

相關文章