Vim 小技巧
- 在插入模式输入 abcd
uefg,再回到普通模式,按 u,会只撤销 efg 变成 abcd,而不会全部撤销
Vimscript 小技巧
- 布尔值:
v:true
,v:false
- 支持函数参数默认值,且可在默认值中调用函数,如
func! Test(lnum = line('.')) ... endfunc
col()
函数返回值是从 1 开始的索引,0 表示错误。因此,假设有一行为0123456789
。- Normal 模式下,光标位置在
4
时(0123█56789
)要获取光标下的字符,应使用getline('.')[col('.') - 1]
。 - Insert 模式下,光标其实是在它后面的字符上(就像是按下
i
之前一样),如果使用getline('.')[col('.') - 1]
,会获得光标后面的那个字符。
- Normal 模式下,光标位置在
Vimscript 正则小技巧
- \%(\):A pattern enclosed by escaped parentheses. Just like \(\), but without counting it as a sub-expression. This allows using more groups and it’s a little bit faster.
- 另一个特殊的 \(\):\z(\)
- \{-n,m}:非贪婪匹配 n 到 m 次
- The “\f” item stands for file name characters.(Neovim 的 Character classes)
- Vimscript 正则匹配支持偏移:/
/ - \%x:匹配十六进制字符,如空格 \%x20
- \?:Just like \=. Cannot be used when searching backwards with the “?” command.
- \%# 匹配光标位置
- \%’m Matches with the position of mark m.
- \%<’m Matches before the position of mark m.
- \%>’m Matches after the position of mark m.
Neovim 与 Lua
编写 lua 脚本时可以使用的函数:
vim.xxx
(首选):如vim.regex()
,vim.split()
,vim.tbl_xxx()
,见:h lua
vim.api.xxx
:Neovim 提供的 API 的 Lua 版本,见:h api
。vim.fn.xxx
:Vimscript 函数的 Lua 版本,见:h function-list
其他可能用到的接口:
- 映射:
vim.keymap
- 高亮:
vim.highlight
- 选项:
vim.opt
,vim.o
,vim.go
,vim.bo
,vim.wo
- 变量:
vim.g
,vim.b
,vim.w
,vim.t
,vim.v
,vim.env
- 文件系统:
vim.fs