程序員如何定製自己的Vim?

很多程序員都會使用Vim輔助編程工作,這個實用的小工具其實還有很多妙用,今天異步君就給大家分享Vim中的定製方法,希望能讓大家在“無聊”的宅家生活變得充實一些。


定製自己的Vim


Vim用戶界面是可擴展的,讀者可以改變Vim的主題,修改某些界面元素的顯示方式,並且增強狀態欄中的信息顯示。此外,gVim還有更多其他可定製選項。

配色

_Vim中可以使用多種配色,一部分是Vim自帶的,一部分則由社區成員提供。讀者可以通過在.vimrc中設置colorscheme來設置配色,如下所示。:colorscheme elflord
通過執行:colorscheme Ctrl + d命令,可以看到當前安裝的配色列表(這裡的Ctrl + d表示快捷鍵),如圖所示。

程序員如何定製自己的Vim?

上面的例子中,使用的是:colorscheme PaperColor,它來自於GitHub倉庫NLKNguyen/papercolor-theme。

讀者可以進一步定製配色,修改其背景色,即將background選項設置為light或dark(必須在設置colorscheme之前完成)。

比如,下圖為暗色調版本,即set background=dark配合PaperColor配色。

程序員如何定製自己的Vim?

瀏覽配色

網上有很多Vim配色,以迎合不同的用戶需求。不過,目前並沒有一個權威的配色資源。讀者需要自行搜索,尋找適合自己審美的配色。

如果讀者已經有很多配色方案,則可以使用插件ScrollColors來幫助自己從中找出最喜歡的樣式。ScrollColors插件有一個:SCROLL命令,可以供用戶交互式地瀏覽不同的配色。

如果使用vim-plug管理插件,則安裝ScrollColors的方法為在.vimrc中添加Plug 'vim-scripts/ScrollColors'代碼,然後運行:w | source $MYVIMRC | PlugInstall命令。

在GitHub倉庫flazz/vim-colorschemes中也有大量的Vim配色,其中包括數百個受用戶歡迎的配色,這應該是一個不錯的資源。

vim-colorschemes插件和ScrollColors可以配合使用,方便用戶瀏覽流行的配色方案。

vim-colorschemes可通過vim-plug安裝,安裝方法為在.vimrc中添加Plug 'flazz/vim-colorschemes'代碼,然後運行:w | source $MYVIMRC | PlugInstall命令。

常見問題

有時候,讀者會發現自己正在試用的配色並沒有示例圖片看起來那麼漂亮,而且顏色數目好像也不夠多。


最可能的原因是終端模擬器錯誤地告訴Vim它只支持8種顏色,而現代終端模擬器普遍支持256種顏色。為解決這個問題,讀者需要正確地設置$TERM環境變量。

這種情況極有可能發生在Tmux和GNU Screen中,因為它們錯誤地彙報了顏色數目。

如果讀者覺得256種顏色還不夠用,某些終端還支持24位顏色,通常稱為真彩色。如果讀者的終端支持24位真彩色(網上搜索確認一下),可在~/.vimrc中添加set termguicolors。

為查看環境變量$TERM當前的值,可運行如下命令。

$ echo $TERM

如果使用Tmux,則在.tmux.conf中添加如下設置。

set****-g****default-terminal "xterm-256color"

如果使用GNU Screen,則在.screenrc中添加如下設置。

term****"xterm-256color"

如果上述方法還不奏效,則在.bashrc中添加如下設置。

TERM=xterm-256color

不過在.bashrc中修改$TERM絕不是什麼好主意。讀者可以自行研究擅自修改$TERM會有什麼後果。


狀態欄

_狀態欄是屏幕底部用於顯示信息的一個區域。通過下列簡單的設置,可以使狀態欄更加符合用戶要求。" 總顯示狀態欄(默認情況下,有時會隱藏)
set laststatus=2

" 在狀態欄中顯示最後執行的命令
set showcmd

如果讀者想深度定製狀態欄,則可以使用插件。這裡介紹兩款插件(Powerline和Airline),其中Powerline是強大的“全家桶”,而Airline則更為輕量級。

Powerline

Powerline為Vim提供了增強版的狀態欄,而且還有其他功能,比如擴展Shell命令提示符或Tmux狀態欄。此插件的GitHub倉庫為powerline/powerline,在Vim中安裝成功之後,Vim的狀態欄如圖所示。

程序員如何定製自己的Vim?

可以看到,Powerline提供的狀態欄中包含了大量的信息,包括當前模式、Git分支、當前文件狀態、文件類型、編碼,以及光標所在的位置。這個狀態欄是可定製的,需要顯示多少信息可由讀者自行決定。

不過,這個插件的安裝有些麻煩,因為它不僅僅是一個Vim插件。首先,需要通過pip安裝Python包powerline-status。

$ python3 -m pip install powerline-status

如果系統中沒有安裝pip,請參見本章開頭介紹的安裝方法。

然後,還需要確保$HOME/.local/bin目錄在系統PATH路徑列表中,即在.bashrc中添加以下代碼。

PATH=$HOME/.local/bin:$PATH

最後,將laststatus設置為2(確保狀態欄不會隱藏),並在~/.vimrc中加載Powerline。

" 總顯示狀態欄(默認情況下,有時會隱藏)
set laststatus=2

" 加載Powerline
python3 from powerline.vim import setup as powerline_setup
python3 powerline_setup()
python3 del powerline_setup

重載Vim配置文件(:w | source $MYVIMRC),就可以看到屏幕底部的狀態欄了,如圖所示。

程序員如何定製自己的Vim?

Airline

如果讀者不需要過多的功能,也不希望Python程序一直在後臺運行,那麼Airline是更好的選擇。

Airline提供了一個同樣漂亮,並且信息足夠豐富的狀態欄,如圖7.5所示。

程序員如何定製自己的Vim?

Airline的GitHub倉庫為vim-airline/vim-airline,它不需要任何依賴項。

可以使用vim-plug安裝Airline,安裝方法為在.vimrc中添加代碼Plug 'vim-airline/vim-airline',然後運行:w | source $MYVIMRC | PlugInstall命令。


gVim相關的配置

_gVim是一個獨立的應用程序,相比於開箱即用的標準版Vim,gVim提供了更多的可配置選項。事實上,除.vimrc之外,gVim還有一個專用的配置文件.gVimrc。配置gVim圖形用戶界面的主要選項是guioptions。這個選項是一個字符串,通過多個字母可分別表示不同的設置,包括如下幾個選項。

● a和P表示將可視模式下的文本選擇自動複製(yank)到系統剪貼板中(參見第2章中關於*和+寄存器的介紹)。

● c表示使用控制檯對話框,而不是彈出窗口。

● e表示用圖形用戶界面組件來顯示製表符。

● m表示顯示一個菜單欄。

● T表示包含一個工具欄。

● r、l、b分別表示右側(r)、左側(l)和底部(b)滾動條總是顯示。


如果讀者希望顯示一個菜單欄和一個工具欄,並且總是顯示底部的滾動條,則可以在.vimrc中添加如下代碼。" GUI設置,顯示菜單欄和工具欄,總顯示底部滾動條
set guioptions=mTb
設置生效之後,界面如圖所示(這裡是Windows系統中的gVim)。

程序員如何定製自己的Vim?

使用Vim的時間越長,就會發現配置文件的改動也越來越頻繁。以至於.vimrc文件最後變成了也許用不到的別名、函數和插件,用戶再也無法思考真正的需求。因此,定期查看.vimrc,並清理掉多餘的函數、插件以及快捷鍵綁定是一件有必要的事。如果不清楚一個配置項的目的,最好將它刪除。

優化工作流程

_每個人的工作流程都是獨一無二的,沒有兩個人能同時走出一條完全相同的Vim軌跡。可以想辦法填補讀者的Vim使用風格的缺陷,並改善自己使用Vim的工作方式。讀者有沒有發現自己頻繁重複使用同一個命令?定製一個快捷鍵是不是更好呢?比如,讀者經常使用CtrlP插件(用於瀏覽文件樹和緩衝區列表),那麼可以使用如下快捷鍵綁定。nnoremap <leader>p :CtrlP
nnoremap <leader>t :CtrlPTag
再比如,讀者經常對光標處的單詞使用Ack命令(由ack-vim插件提供),那麼可以在.vimrc中加入如下設置。nnoremap <leader>a :Ack!
其中,將光標處的單詞插入命令行中,這個功能可以和:grep結合起來。
nnoremap <leader>g :grep */**
有些讀者經常將分號當成引號(進入命令行模式時),那麼只需要重新映射一下快捷鍵就可以解決這個問題。
nnoremap ; :
vnoremap ; :
總之,只要是重複執行的命令和操作,都可以通過定製一個快捷鍵來提高效率。

/<leader>/<leader>/<leader>/<leader>


整理.vimrc

如果經常使用和定製Vim,則.vimrc文件會很快變得龐大,這時令.vimrc更易於瀏覽就顯得非常有必要。建議讀者經常整理.vimrc。
註釋是必要的,不然會忘記當初修改的原因。這和寫代碼是完全一樣的,註釋可消除日後不得不重新學習的煩惱。
比如,下面的配置文件中每一個配置項前面都有一個註釋。

" 在狀態欄中顯示最後執行的命令
set showcmd

" 高亮顯示光標所在的行
set cursorline

" 顯示尺度信息 (在右下部位顯示行、列和百分位)
set ruler

" 當終端足夠寬時,顯示行號


if &co > 80
set number
endif

" 單詞的軟換行
set linebreak

" 較長的文本行的漂亮顯示
set display+=lastline

" 總是顯示狀態欄
set laststatus=2

有些讀者習慣將註釋和配置項寫在同一行,比如下面的配置示例。

set showcmd " 在狀態欄中顯示最後執行的命令

set cursorline " 高亮顯示光標所在的行

set ruler " 顯示尺度信息 (在右下部位顯示行、列和百分位)

if &co > 80 " 當終端足夠寬時,顯示行號
set number
endif

set linebreak " 單詞的軟換行

set display+=lastline " 較長的文本行的漂亮顯示

set laststatus=2 " 總是顯示狀態欄

為每個插件寫一個簡短的註釋是極其有用的,因為當不再需要某些插件時,修改也會非常容易。

Plug 'EinfachToll/DidYouMean' " 文件名建議
Plug 'Lokaltog/vim-easymotion' " 優化移動命令
Plug 'NLKNguyen/papercolor-theme' " 配色
Plug 'ajh17/Spacegray.vim' " 配色
Plug 'altercation/vim-colors-solarized' " 配色
Plug 'christoomey/vim-tmux-navigator' " 優化tmux整合
Plug 'ervandew/supertab' " 更強大的Tab
Plug 'junegunn/goyo.vim' " 集中編輯
Plug 'kien/ctrlp.vim' " 基於模糊搜索的Ctrl+p
Plug 'mileszs/ack.vim' " ack整合
Plug 'scrooloose/nerdtree' " 更美觀的Netrw輸出
Plug 'squarefrog/tomorrow-night.vim' " 配色
Plug 'tomtom/tcomment_vim' " 註釋助手
Plug 'tpope/vim-abolish' " 方便處理單詞大小寫等情況
Plug 'tpope/vim-repeat' " 任意重複
Plug 'tpope/vim-surround' " 在命令行中快速移動
Plug 'tpope/vim-unimpaired' " 快捷鍵的配對使用
Plug 'tpope/vim-vinegar' " 用-打開Netrw
Plug 'vim-scripts/Gundo' " 可視化撤銷樹
Plug 'vim-scripts/vimwiki' " 個人維基百科

使配置文件方便瀏覽的方式有很多。一種推薦的方式是使用基於標記的摺疊。比如,讀者可以將配置文件分為4類:外觀、編輯、移動和搜索,然後用手動摺疊記號{{{1來標記摺疊。

讀者還可以使用一些ASCII藝術形式,比如用箭頭(=>)和橫線(---)使每個章節彷彿擁有一個大標題。

" => 編輯 --------------------------------------------------------- {{{1
syntax on



...

" => 外觀 ----------------------------------------------------------- {{{1

set background=light
colorscheme PaperColor

通過這種方式,可以更方便地瀏覽.vimrc。如果想預覽.vimrc,只需要用zM關閉所有摺疊,如圖所示。

定製自己的Vim,可以提高Vim易用性的方法。每個人的需求是不同的,趕緊照著上面的方法,定製屬於自己的風格吧。


今日互動話題:

“延遲復工期間,你學了什麼新技能?”



分享到:


相關文章: