通過之前一系列的文章,相信各位小伙伴應該已經對vim產生了濃厚的興趣,可能不少小伙伴通過慢慢的使用變的跟我一樣,離開vim就不會寫代碼了。如果你希望繼續長時間使用vim,甚至將vim作為主要的代碼編輯器,那么花一定的時間來學習vim的配置是很有用的。如果你只是因為 linux
平臺默認安裝了 vi/vim
,平時又主要用它改改匹配文件,臨時用用,那么還是趕緊退出這個文章,免得耽誤時間吧。
標題上說從零基礎打造vim多少有點標題黨,要理解后面一系列文章的內容至少要了解vim里面的一些基本概念,我認為在閱讀本系列專欄之前,你應該了解以下內容
- 知道vim,并且知道 vim 的基本操作,例如進入插入模式、移動光標,并且知道如何保存退出
- 知道vim的相關術語,緩沖區列表、緩沖區、窗口、命令模式、插入模式等等
- 知道 vim的配置文件在哪
如果你還不知道,請移步我的專欄,跟著專欄中的內容做做實驗。理解一下里面提到的這些概念。
關于配置部分,我準備介紹以下幾個方面的內容:
- vimscript 的基礎內容,并補充一些之前沒介紹過的vim的特性
- neovim lua對應的接口
- 推薦一些插件和相關配置,做到拋磚引玉
可能有小伙伴要問了,vimscript
不管寫還是讀都比較晦澀,而且 neovim
已經采用更容易理解也更加現代化的 lua
了,有必要學習 vim script
嗎?
我覺得是有必要的,首先 neovim
是 vim
的另一個實現版本,要想學好 neovim
自然繞不開 vim
,而學好 vim
自然也繞不開 vimscript
。其次,lua
腳本中的接口繼承自 vimscript
。想要使用 lua
配置的前提是知道使用 vimscript
配置。它們就好像學習 MFC
繞不開 Win32 API
一樣。所以我覺得想要學習 neovim
的配置自然繞不開 vimscript
。而且 neovim
完全兼容 vim
基本不用擔心 vimscript
在 neovim
中執行不了的問題。 倒是 neovim
并沒有實現 vimscript
百分之百的功能,有些時候還是得靠 vimscript
來實現。
演示環境
之前一系列的文章本來打算在 mac
上做演示的,但是我發現 mac
上錄屏比較麻煩,而且 mac
上的 neovim
我已經配置好了,行為上可能跟裸 vim
有些差距(雖然可以不加載配置文件啟動),所以我采用 WSL2 Ubuntu上的 neovim做演示。
剛好這個演示環境沒有對vim進行過配置。也方便演示從0開始配置。
本教程的環境是 linux中 neovim
的 0.6.1
版本,雖然官方已經放出來 0.8 版本,但是Ubuntu官方源中好像還是 0.6。這里就繼續用它演示吧
第一個 vimscript 腳本
我學習的任何一門語言好像都是從打印 hello world
開始的,我也不能免俗。我們這個教程也從打印 hello world
開始吧
vimscript
中可以使用 echo
和 echom
來打印語句,例如我們可以在命令模式中輸入 echo "hello world"
。我們發現在屏幕的下方出現了 hello world
字樣。
接著我們再使用 echom "hello world"
發現,它仍然在下方打印了 hello world
字樣。這兩者有什么區別呢?
要理解它們的區別我們需要介紹一個新的命令 :message
。這條命令可以查看 message-history
中的內容,我們可以簡單的將這條命令理解為查看 vim
的運行日志(雖然并不是在查看日志)。執行這條命令我們發現,message-history
中只有一條 hello world
。這個時候他們的區別就出來了,一個在打印的同時會將打印信息寫入 message-history
,另一個就僅僅只是打印而已。
各位小伙伴只需要簡單打印不同的語句就能知道 echom
會將內容寫入到日志中,而 echo
不會。這里留個各位自己去實驗吧,我就不做演示了。
我們現在來完成一個小練習,使用vim腳本來寫一段歡迎信息例如 hello, jack
, 我們讓用戶每次打開都能看到這個歡迎信息 。這里的用戶我們暫時讓它固定,后續我們可以做到動態的修改 歡迎的用戶。
我們知道每次打開vim,它都會去加載配置文件,我們只要將要執行的命令寫到配置文件中就好了。還記得配置文件在哪嗎?針對 neovim
來說它支持 vimscript
和 lua
配置(當然它也支持其他語言)。我們將目錄切換到 ~/.config/nvim
。如果各位小伙伴之前有過配置,那么請先將配置做一個備份。同時確保 init.lua
(lua配置)和 init.vim
(vimscript 配置) 只能有一個
我們先嘗試著用 vimscript
的方式來完成這個功能。我們建立一個新文件 ~/.config/nvim/init.vim
。然后在里面寫上一句 echo 'hello, jack'
,然后退出。我們發現每次進入 neovim
之后,總會在下方顯示這么一句話了。
我們再來看看如何使用 lua
來打印這么一句話呢?lua
中對應的函數是 print
。我們可以直接在 之前備份的 init.lua
中寫上 print("hello, jack")
來完成這一個工作(記得現將之前的 init.vim 備份
)。需要注意的是 lua
中的 print
寫將信息一并寫入到 message
中,也就是說它與 echom
效果相同。如果想執行 echo
操作可以使用 api.vim.nvim_echo()
。它的用法比較復雜,這就就不介紹它了,有興趣的小伙伴可以去官網查一下,試試用它來實現這個打印歡迎信息的例子。
這篇文章的內容到此就結束了,最后給大家做一個總結:
- neovim如果想要加載 vimscript配置,可以將配置文件放到
~/.config/nvim/init.vim
中,如果想要加載lua
配置,可以將文件放到~/.config/nvim/init.lua
中。 -
echo
、echom
都會打印字符串,不同的是echom
將打印的內容往一個叫做message-history
的地方寫。lua
中的print
具備echom
的功能 - 可以使用
message
命令查看message-history
的內容 - 從
vimscript
的使用上看,它里面寫的是vim的一些命令,我們將命令寫在文件中讓vim去執行。vim命令與vimscript
的關系有點像shell
命令和shell
腳本的關系