You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:55:27