在 Neovim 使用正規表達式,進行文字的更換(Search and Replace)作業,幾近無所不能。但正規表達式的撰寫,有時會令人頗為心煩, 因為總要為符合「正規表達表的應用規則」,在某些字元之前補上個 "\" (反斜線),以免正規表達式的解析會「誤解」。可是,補上了反斜線之後,卻導致閱讀不易,使用者的思緒反倒被搞亂了。
在 Neovim 中,使用 \v
前綴可以開啟“very magic”模式的正規表達式。在這種模式下,正則表達式的語法更加簡單和直觀,並且不需要像在默認模式下那樣多次使用反斜線 \
來轉義特殊字符。
在“very magic”模式下,特殊字符(如 ()[]{}.*+?^$
等)將被視為元字符,不需要額外的轉義。
例如,假設你想在 Neovim 中搜索所有的數字,你可以使用 \d+
,在非“very magic”模式下需要寫成 \\d+
。使用 \v
之後,就不需要再使用額外的反斜線進行轉義。
以下是使用\v
前綴的示例:
在非“very magic”模式下:
\([0-9]\{3\}\)
在“very magic”模式下:
(\d{3})
總之,使用 \v
前綴可以使正則表達式的撰寫更加簡潔和直觀。
以下為 which-key 設定的部份內容,此處針對 nvterm 插件設定「快捷鍵」。
因為不想使用 <Alt/Option> + <Key> 的操作模式,想改為 <leader> + 't' + <Key> 的方式。
【舉例說明】:若原先的設定為 <A-i>(組合按鍵: <Alt> + <i> ),則改成: <leader>ti 。
M.terminal = {
t = {
-- toggle in terminal mode
["<A-i>"] = {
function()
require("nvterm.terminal").toggle "float"
end,
"Toggle floating term",
},
["<A-h>"] = {
function()
require("nvterm.terminal").toggle "horizontal"
end,
"Toggle horizontal term",
},
["<A-v>"] = {
function()
require("nvterm.terminal").toggle "vertical"
end,
"Toggle vertical term",
},
},
n = {
-- toggle in normal mode
["<A-i>"] = {
function()
require("nvterm.terminal").toggle "float"
end,
"Toggle floating term",
},
["<A-h>"] = {
function()
require("nvterm.terminal").toggle "horizontal"
end,
"Toggle horizontal term",
},
["<A-v>"] = {
function()
require("nvterm.terminal").toggle "vertical"
end,
"Toggle vertical term",
},
-- new
["<leader>h"] = {
function()
require("nvterm.terminal").new "horizontal"
end,
"New horizontal term",
},
["<leader>v"] = {
function()
require("nvterm.terminal").new "vertical"
end,
"New vertical term",
},
},
}
先選擇欲進行「更換(Search and Replace)」的起始行與終止行,然後執行 Neovim 的更換指令如下:
:'<,'>s/\v\<A-(\w)\>/<leader>t\1/g
- \v:要求 Neovim 解析正規表達式時,採用 Very Magic 模式;
- <A-(\w)>:此敘述為「找到」將被更換的原設定按鍵,如: <A-
i
> 。其中的(\w)
更是關鍵,因為它可萃取出原設定按鍵; - <leader>t\1:此敘述為「更換成...」的新設定按鍵,如:<leader>
t
... 。其中的\1
便是剛才用(\w)
萃取出的原設定按鍵。