如何通过Neovim Lua API将当前缓冲区文件名及光标位置存入寄存器?
在Neovim Lua中替代
getcurpos()和expand('%:t')的原生API方案 替代expand('%:t')(获取当前文件名)
要获取当前缓冲区的文件名(不含路径),可以结合Neovim的原生API实现:
local filename = vim.fs.basename(vim.api.nvim_buf_get_name(0))
vim.api.nvim_buf_get_name(0):获取当前缓冲区(0代表当前缓冲区)的完整路径vim.fs.basename():从完整路径中提取文件名(Neovim 0.8+ 内置的文件系统工具函数,属于原生API范畴)
若需兼容更早版本Neovim,也可使用Lua原生字符串处理替代:
local full_path = vim.api.nvim_buf_get_name(0) local filename = full_path:match("([^/\\]+)$")
替代getcurpos()(获取当前光标位置详情)
Vimscript的getcurpos()返回包含缓冲区编号、行号、列号等信息的列表,在Neovim Lua中可通过多个原生API组合实现:
local function get_curpos() local bufnum = vim.api.nvim_get_current_buf() local winid = vim.api.nvim_get_current_win() local lnum, col = unpack(vim.api.nvim_win_get_cursor(winid)) local curswant = vim.api.nvim_get_option_value('curswant', { win = winid }) local off = col -- 通常与col值一致(字节索引),特殊场景可按需调整 return { bufnum, lnum, col, off, curswant } end -- 使用示例 local curpos = get_curpos()
vim.api.nvim_get_current_buf():获取当前缓冲区编号vim.api.nvim_win_get_cursor(winid):获取指定窗口内的光标位置,返回[lnum, col](行号1-based,列号0-based字节索引)vim.api.nvim_get_option_value('curswant', { win = winid }):获取窗口局部的curswant选项值,对应getcurpos()的最后一个元素
如果仅需光标所在行和列,直接调用vim.api.nvim_win_get_cursor(0)即可,无需额外封装。
内容的提问来源于stack exchange,提问作者Jay-Pi
相关产品推荐
相关产品推荐

