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

Neovim+Lua环境下Slimv如何在当前目录启动Swank服务?

解决Neovim中Slimv的%目录占位符解析问题及指定项目目录方法

核心问题原因

你在Vim里直接设置g:slimv_swank_cmd时,%:p:h会被Vim自动解析为当前文件的父目录,但在Lua的vim.cmd([[...]])中,这个占位符不会被自动展开——因为Lua字符串里的%会被当作普通字符传递给Vimscript,而非触发Vim的路径展开逻辑。

解决方案一:用Lua动态生成命令(推荐)

直接在Lua层面获取当前文件的父目录,再拼接成完整命令赋值给全局变量,绕开占位符解析问题:

-- 获取当前打开文件的父目录
local current_file_dir = vim.fn.expand('%:p:h')
-- 拼接Swank启动命令,注意转义双引号
local swank_cmd = string.format(
  '!osascript -e "tell application \\"Terminal\\" to do script \\"cd %s && sbcl --load ~/.local/share/nvim/slimv/lazy/slime/start-swank.lisp\\""',
  current_file_dir
)
-- 赋值给Slimv的全局变量
vim.g.slimv_swank_cmd = swank_cmd

解决方案二:在Vimscript中手动展开占位符

如果想保留Vimscript风格,用Vim的expand()函数手动解析%:p:h,再拼接命令:

vim.cmd([[
let g:slimv_swank_cmd = '!osascript -e "tell application \"Terminal\" to do script \"cd ' . expand('%:p:h') . ' && sbcl --load ~/.local/share/nvim/slimv/lazy/slime/start-swank.lisp\""'
]])

让Slimv打开指定项目目录

如果想固定用项目根目录而非当前文件目录,只需要把上面代码里的路径部分替换成项目根路径即可:

  • 固定目录:直接写死项目路径,比如'/Users/you/projects/my-lisp-project'
  • 动态获取Neovim工作目录:如果打开Neovim时已经cd到项目根,用vim.fn.getcwd()获取当前工作目录:
local project_root = vim.fn.getcwd()
local swank_cmd = string.format(
  '!osascript -e "tell application \\"Terminal\\" to do script \\"cd %s && sbcl --load ~/.local/share/nvim/slimv/lazy/slime/start-swank.lisp\\""',
  project_root
)
vim.g.slimv_swank_cmd = swank_cmd

这样Swank启动后就会在项目根目录运行,你可以直接用相对路径加载项目里的文件。

内容的提问来源于stack exchange,提问作者Tsarko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:13:14