Linux 下 Neovim 配置 Python 開發(fā)環(huán)境指南 | 您所在的位置:網(wǎng)站首頁 › 屬雞與馬合不合財呢 › Linux 下 Neovim 配置 Python 開發(fā)環(huán)境指南 |
Linux 下 Neovim 配置 Python 開發(fā)環(huán)境指南2018-09-05Nvim5521 words
12 mins read
我的完整 Neovim 配置可以點這里查看。 2022-01-29: 本文寫于三年以前,其中提到的一些插件已經(jīng)不再維護,或者對于 Neovim 不是最佳選擇,甚至還有一些插件被 Nvim 自帶的功能所替代,例如,從 2020.05 開始,highlighted yank 開始內(nèi)置。我在 這篇博文 分享了一些插件遷移的事情。 Vim 是一款主要流行于 *nix 系統(tǒng)上的強大的編輯器,另外一款可以與之媲美的編輯器是 Emacs,這兩款編輯器廣泛流行于程序員群體,關(guān)于誰是編輯器之王的爭論經(jīng)久不息。Vim 的功能雖然強大,但是作為一款「古老」的編輯器1,也不是沒有缺點:隨著 Vim 代碼量的增加,維護變得日益困難,不利于快速增加新功能;另外,它的主要開發(fā)者目前只有一個人,Bram Moolenaar,也不符合當今開源社區(qū)多人協(xié)作的習(xí)慣。為了克服 Vim 的這些缺點,保留 Vim 的優(yōu)點(最大程度兼容 Vim),讓 Vim 的開發(fā)能有更快的迭代速度,Neovim 項目誕生了。本文介紹如何安裝 Neovim 并配置 Python 開發(fā)環(huán)境(在以下敘述中,Neovim 和 Nvim 含義相同,不再加以區(qū)分)2。 安裝 NvimNeovim 有針對 Linux 系統(tǒng)的統(tǒng)一的 appimage 格式的可執(zhí)行文件,可以直接從 Neovim GitHub release 頁面下載。下載以后,先賦予文件可執(zhí)行權(quán)限, chmod u+x nvim.appimage為了方便使用,可以在 Neovim 的安裝目錄下建立軟鏈接,用 nvim 來作為該可執(zhí)行文件的外部名稱: ln -s nvim.appimage nvim接下來,我們需要將 Neovim 的安裝目錄加入到系統(tǒng)的 $PATH 變量,編輯.bash_profile 文件,把 Neovim 的安裝目錄(假設(shè)為 $HOME/tools/nvim)加入到$PATH變量: export PATH=$HOME/tools/nvim:$PATH保存文件,然后 source .bash_profile,使更改生效。 至此,Neovim 安裝完成。這樣設(shè)置以后,在命令行使用 nvim 命令即可打開 Neovim。 Nvim 的配置文件Neovim 使用的配置文件和 Vim 不同,需要在 ~/.config/nvim/ 目錄下創(chuàng)建文件 init.vim ,該文件就是 Neovim 的配置文件,Neovim 所有的配置都可以放入其中。 由于 Neovim 是基于 Vim 開發(fā)的,所以 Neovim 和 Vim 的絕大多數(shù)配置都是相同的,如果之前使用過 Vim,可以把之前的配置的大部分拷貝過來使用。關(guān)于 Neovim 和 Vim 的不同,可以參見這里。 使用插件管理器 vim-plugVim 之所以強大,一個很重要的原因是存在很多插件,在 Vim 漫長的發(fā)展過程中,無數(shù)開發(fā)者為 Vim 貢獻了插件,這些插件可以實現(xiàn)各種各樣的功能。如果安裝插件很多,插件管理成為一個麻煩的問題。Neovim 和 Vim 一樣,并沒有自帶插件管理器,我們需要自己安裝插件管理器。經(jīng)過搜索和比較,發(fā)現(xiàn)有兩款比較有名的插件管理器在 Nvim 用戶中流行,分別是 dein 和 vim-plug. Vim-plug 的 user base 更大,最后我決定安裝 vim-plug,以下為 vim-plug 安裝以及簡單的使用說明。 vim-plug 安裝安裝 vim-plug 這個插件本身,運行以下命令安裝:curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim安裝 vim-plug 以后,可能需要退出 Nvim 重新進入。 編輯 init.vim 文件,在該文件中加入 vim-plug 配置部分,以下為一個示例配置(改編自 vim-plug GitHub 主頁,見這里):call plug#begin('~/.local/share/nvim/plugged') call plug#end()所有其它插件的安裝都要放在兩個 call 命令之間,下面不再贅述。 vim-plug 使用以下命令均在 Nvim 命令模式下使用 安裝插件::PlugInstall更新插件::PlugUpdate刪除插件::PlugClean (首先在 init.vim 中,注釋掉該插件,然后打開 Nvim,使用 :PlugClean 命令清除該插件)查看插件狀態(tài)::PlugStatus升級 vim-plug::PlugUpgrade暫時禁用某個插件如果想暫時禁用某個插件,但是不刪除它,有兩種方式。 在 inti.vim 中注釋掉該插件,重新打開 Nvim 即可參考這里給出的解決方法,如果要禁用插件 foo/bar,使用如下設(shè)置Plug 'foo/bar', { 'on': [] } 常用插件安裝與配置自動補全插件 deopletedeoplete 是一款和 YouCompleteMe 類似的自動補全插件,官方對它的描述為: Deoplete is the abbreviation of “dark powered neo-completion”. It provides an extensible and asynchronous completion framework for neovim/Vim8. 準確來說,它其實是一款自動補全的引擎,具體對某種編程語言的自動補全支持,要安裝對應(yīng)的source 才能真正工作. deoplete 安裝相對簡單,在 vim-plug 的設(shè)置里加入以下配置: Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }關(guān)于 deoplete 的配置,官方并未在 GitHub 主頁多說,只給出了一個配置選項: let g:deoplete#enable_at_startup = 1更多選項以及對應(yīng)的含義,可以在 Nvim 中輸入 :h deoplete-options 查看。 如前面所說,deoplete 對不同編程語言的支持需要安裝不同的 source,下面給出 Python語言的 source 配置,供參考。 安裝 deoplete-jediDeoplete-jedi 是和 deoplete 配合使用的 Python source。安裝以及配置步驟如下: 需要安裝的其他庫首先,我們需要安裝 pynvim, pip install pynvim接著,安裝 jedi. 如果你安裝了最新的 Anaconda Python 發(fā)行版,jedi 已經(jīng)安裝了,否則,采用 pip 安裝即可, pip install jedi 安裝與配置 deoplete-jedi 插件編輯 Nvim 的配置文件 init.vim,在 vim-plugin 部分,加入以下命令: Plug 'zchee/deoplete-jedi'然后安裝 deoplete-jedi,如果沒有問題,現(xiàn)在你已經(jīng)可以使用自動補全了!使用 Nvim打開一個 Python 源文件,試著編輯一下,你會看到類似下圖的自動補全菜單: 參考這里的答案,可以使用 Ctrl + N 以及 Ctrl + P 在列表項目中進行切換。 函數(shù)方法 Preview 的窗口如何自動關(guān)閉?在自動補全給出的列表中移動的時候,Nvim 的上半部分會出現(xiàn)一個很小的窗口,提示當前方法的參數(shù),但是該窗口在自動補全完成后并不能自動消失,參考這里,可以使用下面的設(shè)置使得窗口自動消失: autocmd InsertLeave,CompleteDone * if pumvisible() == 0 | pclose | endif Preview 窗口的可以設(shè)為在當前窗口下面打開嗎?默認 preview 窗口在上面打開,可以通過 set splitbelow 使新建立的窗口位于當前窗口下面,參見這里。 如何設(shè)定為使用 Tab 鍵在自動補全的列表跳轉(zhuǎn)?在 Nvim 的配置中,加入如下設(shè)置即可: inoremap pumvisible() ? "\" : "\" 狀態(tài)欄插件 vim-airline原生的 Nvim 狀態(tài)欄比較簡單,不像 Sublime Text 那樣,狀態(tài)欄可以顯示很多信息。有一款不錯的插件 vim-airline 可以實現(xiàn)類似 Sublime Text 的功能。在 vim-plugin 安裝區(qū)加入以下命令: Plug 'vim-airline/vim-airline'然后運行 PlugInstall 安裝該插件,重啟 Nvim 可以看到更新后的狀態(tài)欄。 切換 vim-airline 主題vim-airline 提供了很多主題來個性化狀態(tài)欄,不同主題的樣子可以參見這里。更改vim-airline 主題方式很簡單,首先安裝插件vim-airlinetheme: Plug 'vim-airline/vim-airline-themes'然后,在 Nvim 配置文件中,加入以下設(shè)置, let g:airline_theme='' " 代表某個主題的名稱 自動引號&括號補全輸入引號,括號時,經(jīng)常希望能夠自動輸入一對,原始的 Nvim 不支持這樣的功能,可以使用 auto-paris 插件幫助我們實現(xiàn)這樣的功能。插件安裝: Plug 'jiangmiao/auto-pairs' 使用方法以引號輸入為例,說明如何使用這個插件。按下 ",會自動變成雙引號"",此時光標位于雙引號的中間,等待插入文本,文本插入結(jié)束以后,通常我們希望把光標置于右邊引號的后面繼續(xù)輸入,此時,再按一次 ",光標就會跳轉(zhuǎn)到右邊引號的后面,等待我們繼續(xù)輸入文本。 注釋插件不同編程語言中注釋的表示方法不盡相同,如果能夠根據(jù)當前編輯文件對應(yīng)的編程語言自動選擇合適的注釋符號,將是極好的。nerdcommenter 就是這樣一款插件。安裝插件: Plug 'scrooloose/nerdcommenter'注釋單行,使用 cc,其中 leader 是在 Nvim 中設(shè)置的前導(dǎo)按鍵(Nvim 中默認為 /);如果要反注釋,使用 cu。更多具體使用方法可以參考插件的文檔。 代碼自動 format 插件neoformat 可以對源代碼自動 format。安裝 : Plug 'sbdchd/neoformat'對于 Python 代碼,neoformat 需要配合 Python 的自動格式化工具(稱為 formatter)來使用,這里以 yapf 為例說明,首先安裝該格式化工具: pip install yapf然后,neoformat 在格式化 Python 代碼的時候就可以使用 yapf formatter 了。 如何格式化代碼?命令模式下,輸入 :Neoformat,該插件會對源代碼進行自動 format。還有一款 vim-autoformat,也可以嘗試一下。 如果 neoformat 沒有檢測到文件類型,或者沒有插件,也可以設(shè)置以下命令,讓 neoformat 對文件做簡單的 format: " Enable alignment let g:neoformat_basic_format_align = 1 " Enable tab to spaces conversion let g:neoformat_basic_format_retab = 1 " Enable trimmming of trailing whitespace let g:neoformat_basic_format_trim = 1 代碼跳轉(zhuǎn)(go-to)插件我們經(jīng)常需要跳轉(zhuǎn)到類,方法等的定義,查看實現(xiàn)細節(jié),可以使用 jedi-vim 實現(xiàn),實際上,jedi-vim 還可以進行 Python 代碼的自動補全,但是由于我們已經(jīng)安裝了 deoplete 和 deoplete-jedi進行自動補全,所以將 jedi-vim 的自動補全功能關(guān)閉,只使用代碼跳轉(zhuǎn)功能。 安裝: Plug 'davidhalter/jedi-vim'jedi-vim 配置如下, " disable autocompletion, cause we use deoplete for completion let g:jedi#completions_enabled = 0 " open the go-to function in split, not another buffer let g:jedi#use_splits_not_buffers = "right" 使用d: go to definitionK: check documentation of class or methodn: show the usage of a name in current filer: rename a name文件管理器 n使用過 GUI 代碼編輯器的人都知道,編輯器左邊一般是項目文件瀏覽窗口,在 Nvim 中如何實現(xiàn)這一功能呢?可以安裝 n 來實現(xiàn)。安裝: Plug 'scrooloose/n' 簡單使用如何打開 n 文件瀏覽窗口?直接在命令模式輸入:NERDTree 即可打開當前編輯文件所在的目錄。 如何在文件窗口與 file explorer 窗口切換?按住 Ctrl, 雙擊 w 可以在兩個窗口之間切換。 如何打開 file explorer 中某個文件?把光標移動到該文件,然后按 o,即可在右邊窗口打開該文件。 如何退出 file explorer 窗口?在該窗口直接按 q 即可退出。 更多個性化設(shè)置,可以參考這篇。 代碼檢查工具Neomake 是為 Nvim 做的一款代碼語法檢查和自動化 make 工具。安裝: Plug 'neomake/neomake'Neomake 對不同編程語言的檢查依賴各種 linter,安裝 Neomake 以后,針對要使用的編程語言,我們還需要安裝對應(yīng)的 linter。各種編程語言支持的 linter 列表見這里。 對于 Python,我們可以使用 pylint 作為 linter。直接使用 pip 或 conda 安裝 pylint: conda install pylint安裝 pylint 以后,在 init.vim 中指定使用它作為 Python 代碼檢查器 let g:neomake_python_enabled_makers = ['pylint'] 代碼檢查命令模式下,使用 :Neomake 命令檢查代碼正確性。或者也可以設(shè)置自動檢查,在 Nvim 配置文件中,加入以下設(shè)置: call neomake#configure#automake('nrwi', 500) 多點編輯插件 vim-multiple-cursors使用過 Sublime Text 的人應(yīng)該都對 Sublime Text中多點編輯功能愛不釋手,這個功能對于代碼重構(gòu)非常實用,如何在 Nvim 中使用類似的功能呢?可以借助于 vim-multiple-cursors。安裝: Plug 'terryma/vim-multiple-cursors' 簡單使用命令模式下,首先把光標移動到要重命名的變量處,然后開始按 Ctrl + N,可以看到變量被高亮,繼續(xù)按 Ctrl + N,變量下一個出現(xiàn)的地方被高亮顯示,如果要跳過某個位置該變量的出現(xiàn)(例如,字符串中也可能包含與該變量名相同的子字符串),在該處被高亮以后,再按 Ctrl + X 取消高亮即可,不斷選中變量的出現(xiàn)位置,直到所有想要選中的位置均選中完畢。 此時,按下 c(c 在 Nvim 中代表 change ),進入編輯模式,輸入變量新的名稱,保存即可。更多使用方法,請參考該插件的文檔。 參考https://github.com/neovim/neovim/issues/3845https://github.com/neovim/neovim/issues/211https://github.com/neovim/neovim/issues/7257https://github.com/onivim/oni/issues/184高亮顯示復(fù)制區(qū)域Nvim 中,使用 y 復(fù)制文本以后,不會提示復(fù)制了哪些文本,除非使用者非常熟悉 Nvim按鍵,否則可能會多復(fù)制或少復(fù)制部分字符。vim-highlightedyank 這款插件可以在復(fù)制(yank)文本以后高亮提示哪些文本被復(fù)制了,非常實用。安裝: Plug 'machakann/vim-highlightedyank'通常情況下,安裝插件以后不需要做任何設(shè)置即可使用,但是對于某些主題,高亮的顏色可能看不清楚,可以在 Nvim 設(shè)置中加入以下命令: hi HighlightedyankRegion cterm=reverse gui=reverse如果覺得高亮顯示的時間太短,可以設(shè)置增加高亮顯示的時間(單位為毫秒): let g:highlightedyank_highlight_duration = 1000 " 高亮持續(xù)時間為 1000 毫秒 代碼折疊插件對于很長的代碼,折疊代碼有助于理清代碼整體結(jié)構(gòu)。SimplyFold 是一款不錯代碼折疊插件。安裝: Plug 'tmhedberg/SimpylFold'安裝以后不用進行設(shè)置,開箱即用。 簡單使用zo: 打開光標處的 foldzO: 遞歸打開光標處所有 foldzc: 關(guān)閉光標處 foldzC: 關(guān)閉光標處所有 fold主題安裝與配置Before we beginNeovim 自帶了幾款主題(colorscheme),你可能不喜歡,想要安裝個性化主題。安裝主題相對比較簡單,但是,某些 SSH 程序?qū)︻伾闹С炙坪跤袉栴},導(dǎo)致主題安裝以后,并不能很好工作。經(jīng)過試用多款 Windows 系統(tǒng)下的 SSH 軟件,最終發(fā)現(xiàn)ZOC 最好用,當然Cygwin 也是不錯的選擇。更多的 SSH 軟件,可以參考這里給出的支持 true color 的 SSH 客戶端。 主題安裝介紹gruvbox 是一款 Vim 主題。在 vim-plug 安裝插件部分,加入以下指令: Plug 'morhetz/gruvbox'運行 :PlugInstall 安裝該主題。 在 Nvim 配置文件中加入 colorscheme gruvbox即可啟用該主題,主題有兩個模式,分別為 dark 和 light,可以使用下面的命令進行切換: set background=dark " 或者 set background=light重啟 Nvim,你將會看到主題的變化。在我的 Mac 上,主題顯示如下: 有個叫做 vimawesome 的網(wǎng)站收集了很多不同類型 vim 插件的信息,可以在這個網(wǎng)站尋找合適的插件來嘗試。另外,很多 Vim 插件都發(fā)布在GitHub 上,可以直接在 GitHub 上搜索 vim 和相關(guān)的關(guān)鍵詞查找插件,例如,搜索 “vim colorscheme” 或 “vim theme"可以查找為 vim 設(shè)計的主題。 更改顯示字體Nvim 會自動使用 ssh 客戶端設(shè)置的字體,所以在客戶端設(shè)置字體即可。一些比較不錯的編程字體有: FiraCodeSource Code ProHack內(nèi)置 terminalNeovim 原生支持 terminal,內(nèi)置了 terminal emulator,可以直接在 Neovim 內(nèi)運行 shell,對于一些臨時的 shell 作非常方便。打開的方式為在命令模式下輸入 :terminal 或者輸入 vnew term://bash(表示在水平方向再打開一個bash shell) 或者 new term://bash(在垂直方向打開一個 bash shell)。 進入 terminal 后,默認是命令狀態(tài),不能輸入文字,按 i 開始輸入命令。如何退出terminal window 的插入狀態(tài)?按。 要退出 terminal 窗口,輸入 exit 即可,此時 terminal 的窗口將關(guān)閉。 Neovim 與 Vim 的不同支持 bracketed paste modeNeovim 官方文檔指出 Neovim 支持 bracketed paste mode,因此 Vim 中的 paste 選項已經(jīng)過時了,在 Neovim 中使用 :h paste,可以看到如下的說明: This option is obsolete; bracketed-paste-mode is built-in. Neovim is all nocompatible在 Neovim 界面,使用 :h compatible,給出的信息可以看到, Nvim is always “nocompatible” 一些小問題在 Tmux 中,Nvim 的主題顏色顯示有問題首先,如果你的終端模擬器支持真彩色,那么需要先安裝最新版本的 tmux3。然后把如下配置加入到 tmux 配置文件 (~/.tmux.conf) 中 (參考 這里): set -g default-terminal "screen-256color" set -ga terminal-overrides ",xterm-256color*:Tc"然后顏色顯示應(yīng)該會正常。如果你使用的終端不支持真彩色,那么就在 Neovim 的配置中加入下面的設(shè)置: set notermguicolors更多的討論參考這里. 如何記錄 Neovim 啟動時候的 log參考這里。使用 nvim -VNUMnvim.log 來啟動 Neovim。 NUM 用來指定 log 的 verbosity 等級,例如 nvim -V10nvim.log 將會生成一個 verbosity 等級為 10 的 log 文件。 另外在命令行運行 nvim --help 也有相關(guān)幫助信息. 至此,Neovim 就算配置完成了,終于可以愉快碼代碼了。 Vim 最初于 1991 年發(fā)布,它的前身 Vi 誕生于 1978 年。??? 關(guān)于如何在 Windows 上配置 Neovim,參考這里.??? 參考這里,安裝 Tmux 最新版。??? Author jdhao LastMod 2022-01-29 License CC BY-NC-ND 4.0 Python Linux font 字體 pylint |
今日新聞 |
推薦新聞 |
專題文章 |
CopyRight 2018-2019 實驗室設(shè)備網(wǎng) 版權(quán)所有 |