通過之前一系列的文章,相信各位小夥伴應該已經對vim産生了濃厚的興趣,可能不少小夥伴通過慢慢地使用變得跟我一樣,離開vim就不會寫代碼了。如果你希望繼續長時間使用vim,甚至将vim作為主要的代碼編輯器,那麼花一定的時間來學習vim的配置是很有用的。如果你隻是因為 linux 平台默認安裝了 vi/vim ,平時又主要用它改改匹配文件,臨時用用,那麼還是趕緊退出這個文章,免得耽誤時間吧。
标題上說從零基礎打造vim多少有點标題黨,要理解後面一系列文章的内容至少要了解vim裡面的一些基本概念,我認為在閱讀本系列專欄之前,你應該了解以下内容
如果你還不知道,請移步我的專欄,跟着專欄中的内容做做實驗。理解一下裡面提到的這些概念。
關于配置部分,我準備介紹以下幾個方面的内容:
可能有小夥伴要問了,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() 。它的用法比較複雜,這就就不介紹它了,有興趣的小夥伴可以去官網查一下,試試用它來實現這個打印歡迎信息的例子。
這篇文章的内容到此就結束了,最後給大家做一個總結:
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!