自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Lua 編寫 Neovim,插件你會了嗎?

開發(fā) 前端
很多時候我們的插件是需要和用戶進行交互的,也就是用戶輸入一些命令之后,我們要能夠響應用戶的輸入,然后來調整我們插件的輸出。

在 vim 中 viml 是第一公民,很多插件都是使用 viml 進行開發(fā)的,而在 neovim 中,lua 成為了主要的腳本語言,幾乎現(xiàn)在 95%以上的 neovim 都是采用 lua 進行開發(fā)的。

插件目錄結構

開發(fā)一款插件,我們首先要明確插件的目錄結構,雖然這個結構不是必須固定的,但是遵守一定的規(guī)則可以讓我們的插件變得更容易被修改,更容易進行擴展。

插件目錄一般為一個 plugin 文件夾放入我們的主文件,lua 文件夾放入代碼庫。

浮動窗口

在 neovim 中,增加了浮動窗口的功能,這樣我們顯示一些信息非常的方便,我們可以使用 neovim 提供的關于浮動窗口的 api 進行插件的編寫。

編寫插件的時候,我們一般都會首先定義一些變量,這樣方便我們后續(xù)的使用。定義好變量之后,我們接下來會根據(jù)需求定義我們的函數(shù),一般情況下都是一個功能定義一個函數(shù),每個函數(shù)完成一個指定的功能。

圖片

此外,需要注意的一點就是,一般插件都是會有一些默認配置的,我們可以定義一些配置默認值,這樣用戶可以在零配置的情況下就使用我們的插件。

簡單的代碼如下:

local api = vim.apilocal buf, win
local function open_window() buf = api.nvim_create_buf(false, true) -- create new emtpy buffer
api.nvim_buf_set_option(buf, 'bufhidden', 'wipe')
-- get dimensions local width = api.nvim_get_option("columns") local height = api.nvim_get_option("lines")
-- calculate our floating window size local win_height = math.ceil(height * 0.8 - 4) local win_width = math.ceil(width * 0.8)
-- and its starting position local row = math.ceil((height - win_height) / 2 - 1) local col = math.ceil((width - win_width) / 2)
-- set some options local opts = { style = "minimal", relative = "editor", width = win_width, height = win_height, row = row, col = col }
-- and finally create it with buffer attached win = api.nvim_open_win(buf, true, opts)end

視圖更新

幾乎所有的插件最后都要更新渲染視圖,我們可以根據(jù)指定的內容進行視圖的更新,一般都是根據(jù)執(zhí)行的一些命令結果來更新視圖,在 neovim 中,可以通過vim.fn.systemlist函數(shù)獲取命令執(zhí)行結果,然后通過函數(shù)api.nvim_buf_set_lines將結果渲染到視圖上。


local function update_view()
-- we will use vim systemlist function which run shell
-- command and return result as list
local result = vim.fn.systemlist('git diff-tree --no-commit-id --name-only -r HEAD')

-- with small indentation results will look better
for k,v in pairs(result) do
result[k] = ' '..result[k]
end

api.nvim_buf_set_lines(buf, 0, -1, false, result)
end

插件交互

很多時候我們的插件是需要和用戶進行交互的,也就是用戶輸入一些命令之后,我們要能夠響應用戶的輸入,然后來調整我們插件的輸出。

圖片

在 neovim 中,我們可以通過api.nvim_buf_set_keymap來進行輸入按鍵的功能綁定。

函數(shù)導出

最后,我們可以將我們的插件中的函數(shù)進行導出,也就是讓它們可以被執(zhí)行。最后再在主函數(shù)中調用它們即可,這樣我們的插件就編寫完成了。

local function my_plugin()
position = 0 -- if you want to preserve last displayed state just omit this line
open_window()
set_mappings()
update_view(0)
api.nvim_win_set_cursor(win, {4, 0}) -- set cursor on first list entry
end

return {
my_plugin = my_plugin,
update_view = update_view,
open_file = open_file,
move_cursor = move_cursor,
close_window = close_window
}
責任編輯:武曉燕 來源: 程序那些事兒
相關推薦

2023-06-26 00:01:11

2023-05-04 08:01:35

umi 插件開發(fā)插件

2024-07-17 09:23:58

Vite插件機制

2024-02-02 11:03:11

React數(shù)據(jù)Ref

2023-10-30 07:05:31

2023-12-27 07:31:45

json產(chǎn)品場景

2022-11-08 08:45:30

Prettier代碼格式化工具

2024-08-19 10:24:14

2022-03-11 14:59:21

JavaScript數(shù)組字符串

2024-05-22 08:03:15

2023-06-15 08:00:23

2022-10-30 10:31:42

i2ccpuftrace

2022-11-21 16:57:20

2011-08-23 18:04:40

LuaWiresharkDissector

2024-05-10 08:00:48

K8soperatorGitHub

2022-04-01 08:23:17

InputstreString字符串

2023-01-10 08:43:15

定義DDD架構

2024-02-04 00:00:00

Effect數(shù)據(jù)組件

2023-07-26 13:11:21

ChatGPT平臺工具

2024-01-19 08:25:38

死鎖Java通信
點贊
收藏

51CTO技術棧公眾號