在 neovim 中调用术语命令时如何连接字符串以作为输入提供

How to concatenate strings to provide as input when calling the term command in neovim

我有以下例子:

autocmd FileType python nnoremap <buffer> <leader>c :let python_file=expand('%:p')<CR>:term 'python ' . python_file<CR>

这是 运行 python 代码的示例脚本,但是每当我尝试在 python 文件中使用此键绑定时,我都会收到以下错误:

''python' is not recognized as an internal or external command,

似乎正在发生的事情是术语命令可能没有正确连接字符串 ('python ' . python_file),我将其作为命令提供。

有什么办法可以解决这个问题吗?

请注意,这只是我正在尝试做的事情的一个简化示例,请不要提出诸如 :term python expand('%:p') 之类的解决方案,我知道它适用于大多数常见情况,但不适用于我的情况。

:terminal 需要一个字符串,而不是一个表达式。您将不得不使用 :help :execute 将您的命令放在一起:

nnoremap <key> :let python_file=expand('%:p')<CR>:execute 'term python ' .. python_file<CR>

(Please note that this is just a simplified example of something which I am trying to do please do not suggest a solution such as :term python expand('%:p') which I know will work for most common cases but it will not work in my case)

嗯,还可以进一步简化:

autocmd FileType python nnoremap <buffer> <leader>c :term python %:p<CR>

提问时要聪明。您发布的映射没有任何意义,因此回答者关注 给他们的示例并根据您提交的示例提出建议是非常合理的:XY 问题是这些部分确实存在问题。

例如,您的问题可以用很多简单的术语来说明,不会引起对您设计的映射的不必要的注意:

I have a file path in variable ... but I can't make :term use it. I have tried ... and ... but nothing worked. What did I do wrong?

只有一个答案,这不会对您的意图做出任何假设。