前面我們算是對
vimscript
做了一個入門,并且實作了一個 輸出
hello world
的語句。現在我們繼續進行
vimscript
的學習。
set語句
之前在介紹
vim
基礎的時候,我們說要開啟或者關閉某個屬性,并且給出了相關的配置代碼。那個時候已經接觸了
set
語句了。例如我們使用
set number
來顯示行号。這裡我們可以知道 set的第一個用法:
set attribute
其中這個
attribute
是一個屬性名稱,用于開啟/關閉屬性。
設定布爾值
一般在程式設計中将開啟或者關閉某個特性的變量設定為
bool
值。在
vim
中也是如此,但是它的特殊性在于它并不是将這個變量設定為
true
或者
false
而是設定為
name
或者
noname
的樣子。舉個例子,設定顯示行号使用
set number
設定不顯示行号使用
set nonumber
。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5iM0MzMzIWYmFDN0ITY2gzYyYzXwIjMzEDM5AzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.gif)
另外對于
bool
類型的屬性值還可以使用
!
來對現有值進行取反,使用
?
來檢視目前使用的值。例如,如果目前不顯示行号
set number!
會顯示行号,再次執行則
:set number!
則不會執行。我們可以使用
set number?
來檢視目前是否顯示行号
下面我們來執行這麼一個例子
set number
set number?
set number!
set number?
第一個
set number?
應該會傳回
number
而第二個應該會傳回
nonumber
設定鍵值對
有些值是屬于
bool
類型,我們隻需要
set
某一選項即可。但是有些屬性并不适合設計成
bool
類型,例如視窗寬度、高度等等。他們更适合做成一個鍵值對的形式。針對這種形式的屬性,我們直接使用
set key=value
的形式。例如
set columns=80
。對于這種類型的屬性仍然可以使用
?
來顯示目前的值。例如
set columns?
來顯示目前每行的最大字元長度。
當然,與其他程式設計語言類似,我們也可以使用
set
語句,一次性給多個屬性進行指派,例如
set number columns=80
隻是一般程式設計語言多個變量的指派使用
,
作為分割,但是
vimscript
中使用 空格。
使用 lua 設定vim屬性
作為一門更加規範的程式設計語言,
lua
提供了多種方式來對這些變量進行指派。目前有如下辦法能對這些屬性進行指派。
使用neovim提供的全局函數進行設定
neovim
中提供了一組函數來設定這些屬性。常見的分為三類:
-
設定全局屬性
a.
vim.api.nvim_set_option()
:設定值
b.
: 擷取值vim.api.nvim_get_option()
-
設定視窗相關屬性
a.
vim.api.nvim_win_set_option()
: 設定值
b.
: 擷取值vim.api.nvim_win_get_option()
-
設定緩沖區相關屬性
a.
vim.api.nvim_buf_set_option()
:設定值
b.
: 擷取值vim.api.nvim_buf_set_option()
例如我們可以使用
vim.api.nvim_set_option('number', true)
來設定 顯示行号。使用這些函數時需要嚴格區分對應屬性是
bool
、數字或者字元串類型。在
vimscript
中則沒有這麼嚴格的區分。
使用元通路器進行設定
neovim
的接口針對上述這些函數進行了一定的封裝,提供了一組元通路器,以便我們能夠像使用普通變量一樣使用這些屬性值。至于什麼是元通路器暫時不用關心,隻需要知道我們可以像使用變量一樣來設定和獲得這些屬性,但是本質上還是在調用上述那些函數。
針對上述函數,我們可以使用如下幾種通路對象:
- vim.o: 全局屬性,我們可以利用 options來記憶
- vim.bo: 緩沖區屬性,我們可以利用 buffer-option來記憶
- vim.wo: 視窗屬性, 我們可以利用 window-option來記憶
例如我們可以使用
vim.o.number = true
或者
vim.o.columns = 80
來設定對應選項。等效于
vim.api.nvim_set_option("number", true)
和
vim.api.nvim_set_option("columns", 80)
總結
通過這篇文章,我們讨論了使用
set
來設定一些選項,并且給出了對應的使用
lua
來設定的方法。下面小夥伴們要做的就是讀一下
vim
的使用者手冊,根據自己的喜好嘗試着設定一些其他選項。
例如我喜歡的基本配置如下:
vim.o.syntax = "enable"
vim.o.relativenumber = true
vim.o.number = true
vim.o.wrap = true
vim.o.ruler = true
vim.o.incsearch = true
vim.o.softtabstop = 4
vim.o.shiftwidth = 4
vim.o.expandtab = true
如果是vim可能需要的配置更多,但是
neovim
沒有曆史包袱,預設的已經很好用了
最後,目前教程采取這種
vimscript
穿插着
lua
的方式進行講解,後續配置雖然主要以
lua
為主,但是有時候又離不開
vimscript
,
neovim
并沒有完全開放
vim
的内置功能,有些功能隻能使用
vimscript
來實作。