前言

俗話說得好:「顏值即是戰鬥力」,好看的配色是工程師寫扣的熱情來源之一,也因此 Neovim 社群至今產出了大量的顏色主題、以及許多用來製作個人顏色主題的外掛工具。

你可以先到我們上一章提到過的 Awesome Neovim 中,去找一套自己喜歡的顏色主題。或者,我更推薦 Trending Neovim Colorschemes 這個網站,除了羅列了許多常見的顏色主題外,還附帶預覽圖,甚是方便。

而本章則只紀錄幾個我常用的顏色主題,包含:

本章主要會使用範例的方式來說明如何下載與啟用顏色主題,如果想直接複製我的設定文件,可以到這裡(我的 github)來複製完整版的內容。

另外,我們將使用 lazy.nvim 來做為外掛管理器下載它們,如果你還不知到什麼是 lazy.nvim 的話,建議先回去看上一章


下載外掛

首先,我們要先到 imp/plugins/ 中新增一個設定文件 colorscheme.lua

接著,如果你只要下載一個主題,你可以寫入以下內容:

1
2
3
4
5
6
7
8
9
10
11
12
return {
"folke/tokyonight.nvim",
lazy = false,
priority = 1000,
config = function()
require("tokyonight").setup({
style = "night", -- "storm", "moon", "night", "day"
})

vim.cmd.colorscheme("tokyonight")
end,
}

或者,如果你和我一樣想下載多個主題來隨時切換,你可以採用這樣的寫法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
local colorscheme = "kanagawa"

return {
{
"folke/tokyonight.nvim",
lazy = false,
priority = 1000,
config = function()
require("tokyonight").setup({
style = "night", -- "storm", "moon", "night", "day"
})

vim.cmd.colorscheme(colorscheme)
end,
},
{
"rebelot/kanagawa.nvim",
lazy = false,
priority = 1000,
config = function()
require("kanagawa").setup({
background = {
dark = "wave", -- "wave", "dragon", "lotus"
light = "lotus",
}
})
end,
},
}

儲存並重新開啟 Neovim 後,你應該會看到 lazy 的介面自動彈出,顯示它偵測到有新的外掛,並正在下載中,且在下載完成後,就會自動套用我們設定的顏色主題了。


plugin spec 參數說明

先前我曾提到過,根據我們的設定,lazy 會訪問 plugins/ 中所有的設定文件,並要求它們回傳一至多個 plugin spec,而這也就是這兩個例子的主要差別。

在第一個例子中,我們直接回傳了一個 spec,而在第二個例子中,我們則是回傳了一個由兩個 spec 所組成的列表。

plugin spec 是 lazy 用來描述外掛如何安裝和設定的表格,以第一個例子為例,它包含了以下幾個部分:

  1. 第一個參數:外掛的下載位址。
    spec 的第一個參數必須是外掛的下載位址,預設情況下,它指的是外掛在 Github 上的短網址,例如我們這裡的 folke/tokyonight.nvim,就是 tokyonight 主題的 Github 網址的末兩段。
  2. lazy:懶加載設定。
    一個 boolean 值,當設為 true 時,lazy 會只有在 Neovim 運行過程中使用到外掛的功能時,才會將外掛載入運行;反之,則會在 Neovim 啟動時立即加載這個外掛。
    有鑑於我們希望 Neovim 在開啟時就載入我們的顏色主題,所以這裡我們將其設定為 false
  3. priority:加載優先級。
    一個整數,當我們的外掛越來越多,加載時自然也就有個先後順序,lazy 預設的 priority 是 50,數字越大就越先加載。
    有鑑於我們希望顏色主題可以優先於所有外掛啟動,因為有些外掛可以透過引用它們,來更改自己的 UI 設定,所以這裡官方的建議是將它設為 1000。

外掛設定、config、與 opts

在 Neovim 中,慣例而言我們會使用 require("外掛名稱").setup({設定內容}) 這個函式來在 Neovim 開啟時啟動外掛,以及將傳入的設定內容與官方預設的設定項進行合併,來作為執行外掛時的設定項。

對此,lazy 在 spec 中提供了兩個參數:configopts,來將這件事再更簡化一些。

config

1
2
3
4
5
6
7
8
9
10
11
12
{
"folke/tokyonight.nvim",
lazy = false,
priority = 1000,
config = function()
require("tokyonight").setup({
style = "night", -- "storm", "moon", "night", "day"
})

vim.cmd.colorscheme("tokyonight")
end,
},

讓我們先來看第一個例子,在 lazy 中,config 可以是一個函數,它會在外掛加載後執行。

而在這個例子中,我們透過在函數中呼叫 require("tokyonight").setup({設定內容}) 來啟用外掛,並同時對它進行設定。

注意,這個啟用和設定方式只是慣例,大多數常用外掛都是這麼做的,但還是有些不是,例如我所使用的顏色主題之一 sonokai 就不是這樣,所以具體該怎麼用,還是得看官方 Github 上的說明文件,唯一的共通點是,不論方式,你都可以把它寫在 config 之中。

至於設定內容有哪些可以調整,由於各個顏色主題的設定項都大同小異,且都不是特別重要,所以這裡就請各位自己去查看官方文件吧,或是在 Neovim 中輸入指令 :help 主題名稱 ,通常都可以找到類似 Configuration 的設定教學文件。

而實際上,我也沒有調整太多東西,其實各主題的預設內容就已經很好用了。

而在 config 的最後,我調用了 vim.cmd.colorscheme(colorscheme) 這個 Lua 函式來將 Neovim 的主題更換成已經啟用的 tokyonight,或者,你也可以使用指令 :colorscheme 主題名稱 來手動套用顏色主題。

opts

1
2
3
4
5
6
7
8
9
10
11
{
"rebelot/kanagawa.nvim",
lazy = false,
priority = 1000,
opts = {
background = {
dark = "wave", -- "wave", "dragon", "lotus"
light = "lotus",
}
},
}

接著我們來看第二個例子,config 除了設為函數外,其實還可以設為 true,而這也是 lazy 預設的選項。

configtrue 時,lazy 會自動呼叫 require("外掛名稱").setup(opts) 來啟用和設定外掛。

所以就有了如上的第二種設定寫法,當外掛是使用上述方法來啟用和設定時,我們就可以不使用 config 參數(因為預設就是 true 了),而是直接把要調整的設定項寫在 opts 中即可,來使得設定文件更加簡潔一些。

不過這個寫法有一個壞處,就是你無法執行除了 setup 以外的其他事情,因為只要你將 config 改為了函數,opts 就會失效,等於你還是得用第一種的方式,來重寫你的設定項。

例如在這個例子中,我們還需要想辦法執行 vim.cmd.colorscheme("顏色主題") 來在每次 Neovim 開啟時自動套用顏色主題,所以,為了設定文件的一致性,我建議還是一律使用 config 來進行設定比較好。


後記

至此就是本章的所有內容了,Neovim 終於染上了自己喜歡的顏色,我們也終於對 lazy 的 plugin spec 有了基本的了解。

而在接下來的系列文中,我將會分成兩大部分:

  1. 程式編輯核心外掛:這部分我將會介紹與程式編輯相關的核心外掛,包含自動補齊、語法引擎、語法凸顯、Linter、Formatter 以及 Debugger 等等。

  2. 常用功能外掛:這部分我將介紹一些我覺得很好用的功能外掛,包含文件瀏覽器、全域糢糊搜尋、索引標籤與狀態列、以及 Git 集成工具等等。

至於下回預告,我也還不知道,還請各位敬請期待吧。

上一篇: Neovim 外掛管理工具 —— lazy.nvim