從上周開始我就開始折騰 ,搞了一下 Vim IDE for Python & Go,我將整個搭建的過程整理成本篇文章分享出來,本篇是 Python 版本的保姆級教程,實際上我還寫了 Go 版本的,有想看的可以本篇文章點個贊,我下篇就發
一說到 IDE,總有人會因 which one is 世界上最好的編輯工具 而吵得不可開交,但本文不會涉及、也不想誤導大家,我相信不同的人、不同的使用場景都有著有不同的最優解,世界上沒有一招通吃的編輯器。
如果是在桌面端,PyCharm 和 VS Code 已經做得足夠優秀,很難再有第三個編輯器可以與之匹敵。
但若要說在服務端?似乎沒得選,Vim 幾乎是你唯一的選擇。
Vim 是極具生產力的工具,甚至在某些人的眼中,它是一個魔鬼般的編輯器,之所以這么說,是因為它的上手門檻極高,學習曲線非常的陡。
一是,它是針對程序員群體的專有編譯器,你需要額外學習并理解它的設計理念,并且需要記住非常多復雜的操作指令。
二是,對于工程項目代碼,它并不是一個開箱即用的編輯器,需要你安裝大量的插件、進行大量的配置才能成為一個稱手的 IDE 工具。
之所以,我使用 Vim 作為開發的工具,原因有四:
如果你對 Vim 操作一無所知,那么請先去了解一下 Vim 的日常使用方法,否則以下內容并不適合你。
本文是在 Mac 環境下進行操作演示的,但同樣適用于 Linux 環境(少許差異,我會在相應位置點出),如果你只有 Windows 系統,可以使用 GVim。
在開始安裝配置之前,先說一下本文的一個整體思路:
Vim 原生對 Python 提供了支持,當你安裝 8.2 版本的 Vim 時,會自動安裝 Python ,只不過該安裝版本并不是你需要的版本,不過不要緊,Vim 運行使用的 Python 版本是可以配置的。
我這邊使用的版本是 Python 3.10.0
$?python3?--version Python?3.10.0
正常的 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)
Vim 本身提高的功能已經非常強大,但無奈上手難度實在太大,安裝一些定制化的插件,能讓整個 Vim 界面管理與使用更加符合人類的直覺,降低使用門檻。
具體要安裝哪些插件,還要是看你想把 Vim 打造成什么樣子?
這個倒不必悶著頭空想,對照著桌面端的 IDE 軟件去抄作業就 OK 了嘛。
對于我個人來說,我日常使用 IDE 最多的功能有:
那我就對照這個功能去找對應的插件即可
那么如何安裝這些插件呢?
很簡單,你只要使用 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。
上面的插件安裝,其實做的事情也比較簡單,就是把 Github 上的倉庫拉取到本地的 ~/.vim/plugged
目錄
一般情況下,這些插件都是開箱即用的,不會有復雜的依賴,但唯獨一個插件比較特殊 ,它就是 YouCompleteMe
,它號稱是最難安裝的 Vim 插件。
我在本地的 Mac 機器上裝了兩個晚上,才算把所有的依賴都解決完成,但在 Linux 上就比較順利。
具體的安裝步驟是
~/.vim/plugged/YouCompleteMe
插件目錄,修改 .gitmodules
中的 github.com 為 鏡像網站 hub.fastgit.orggit submodule update --init
third_party/ycmd
目錄下所有依賴的.gitmodules
中的 github.com 為 鏡像網站 hub.fastgit.orggit submodule update --init --recursive
python3 install.py --all
,--all 會安裝該插件支持的所有語言功能。在 Mac 上安裝的過程中,遇到了相當多的問題,還涉及到了改 YouComplete 的代碼,最后才得以正常安裝下去,可能你在安裝的過程中也會遇到類似的問題,如果有問題,歡迎在評論區留言,我會盡力解答。
上面安裝插件的過程其實會去 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
就可以了
大部分插件安裝好后,可以立馬使用,但有一些插件需要再進行一些配置才能用得更稱手。
由于配置非常多,我這里就不直接貼出來了,有感興趣的加我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
使用 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
就可以直接運行當前的腳本。
如果你和我一樣,有自己的服務器,那么你根據上面的步驟把 Vim 配置好后,就可以在 iPad 上通過 SSH 連接服務器進行代碼的編寫了。
如果你沒有服務器,只要可以加我v: hello-wbm,我就送你一臺一年期的阿里云服務器,名額有限,我只能說先到先得。
剛好我手上有一臺 2020 款的 iPad Pro,平時也是用來視頻居多,實在有點對不起 Pro 這個配置,有了 Vim 這個神器,生產力 up 了一點點。。
有必要說明一下,之所以花了五天這么長的時間,其實我是把我手上的幾臺電腦,包括服務器全部配置了 Vim IDE,不同的機器,遇到的問題都有點不太一樣,其中在我的 Mac 上,遇到的問題最多,折騰的時間最長,其中有些問題,我 Google 不到答案,最后是看了代碼,修改了部分代碼才跑下去的。
另外,對于 Vim 來說,最重要的就是 .vimrc 文件,上面的講解可能我會漏了一些配置講解,如果你發現使用不是那么順利,可以下載我的 .vimrc 文件:https://wwe.lanzoui.com/i9gD5vrzufi
本文是 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),帶大家一起薅羊毛。
我在 『開源中國』寫過很多的 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
有幫助的話,記得幫我 @王炳明 點個贊喲~
|