阅读-nvim-tree-源码

避免反复加载

1
if exists('g:loaded_tree') | finish | endif

如果设置了 g:loaded_tree 这个变量, 则停止 sourcing a script (finish 的作用)

获取一个选项的值

可以直接用 & + option, 如:

1
let s:value = &cpo

创建一个 buffer 并设置 options

创建:

1
2
3
local BUF_NAME = 'test'
buf = vim.api.nvim_create_buf(false, true)
vim.api.nvim_buf_set_name(buf, BUF_NAME)

vim.api.nvim_create_buf 相关参数:

  • 第一个参数决定是否将这个 buffer 加入缓冲区列表
  • 第二个决定是否创建临时缓冲区 (即不与文件关联, 没有名称)

设置 options:

1
2
3
4
5
6
7
8
9
local options = {
bufhidden = 'wipe';
buftype = 'nowrite';
modifiable = false;
}

for opt, val in pairs(options) do
vim.api.nvim_buf_set_option(buf, opt, val)
end

将一个 buffer 和一个 window 绑定

1
2
3
local win_width = 30
vim.api.nvim_command('topleft '..win_width..'vnew | set nonumber norelativenumber')
vim.api.nvim_win_set_buf(0, buf)

这里 0 表示当前窗口.

关闭一个 window

1
2
3
api.nvim_win_close(win, true)
win = nil
buf = nil

设置多个 keymap 的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
local function set_mappings()
local mappings = {
['<CR>'] = 'open_file("edit")';
['<C-v>'] = 'open_file("vsplit")';
['<C-x>'] = 'open_file("split")';
f = 'find_file()';
}

for k,v in pairs(mappings) do
api.nvim_buf_set_keymap(buf, 'n', k, ':lua require"tree".'..v..'<cr>', {
nowait = true, noremap = true, silent = true
})
end
end

设置缓冲区内容

1
2
3
api.nvim_buf_set_option(buf, 'modifiable', true)
api.nvim_buf_set_lines(buf, 0, -1, false, content)
api.nvim_buf_set_option(buf, 'modifiable', false)
  • 0 表示起始行为第 1 行
  • -1 表示结束行为最后一行
  • false, 指保留原始缩进
  • content, 是用于填充的内容

给缓冲区设置 highlight

vim.api.nvim_buf_add_highlight(), 语法为 (可查看 :h nvim_buf_add_highlight):

1
vim.api.nvim_buf_add_highlight({buffer}, {ns_id}, {hl_group}, {line}, {col_start}, {col_end})
  • {buffer}, 指 Buffer handle, 设置 0 指当前 buffer
  • {ns_id}, 指 namespace id, 设置 -1 表示不用 namespace 进行分组
  • {hl_group}, 指要使用的 highlight group 的名称
  • {line}, 指要 highlight 的行
  • {col_start}, 指开始的 column
  • {col_end}, 指结束的 column

namespace

其用于组织一组 highlight, 便于批量管理和操作.

nvim_create_namespace() 创建一个 namespace 并返回一个 ns_id.

nvim_buf_clear_namespace({buffer}, {ns_id}, {line_start}, {line_end}) 用于利用 namespace 批量清除 highlight.


阅读-nvim-tree-源码
http://example.com/2024/01/13/阅读-nvim-tree-源码/
作者
Jie
发布于
2024年1月13日
许可协议