“错误”;只允许使用一个文件名";Dmenu+;ubuntu上的Vim

“错误”;只允许使用一个文件名";Dmenu+;ubuntu上的Vim,ubuntu,vim,Ubuntu,Vim,在ec2/ubuntu上尝试使用vim的dmenu。Git已安装 按照此处的步骤进行操作: 知道我为什么会在vim中出错吗 Error detected while processing function DmenuOpen: line 5: E172: Only one file name allowed: tabe dmenu: cannot open display 出于某种原因,您的函数将多个文件名或Vim理解为多个文件名传递给只能处理一个文件名的:tabe或:e 也许文件名中有空格

在ec2/ubuntu上尝试使用vim的dmenu。Git已安装

按照此处的步骤进行操作:

知道我为什么会在vim中出错吗

Error detected while processing function DmenuOpen:
line 5:
E172: Only one file name allowed: tabe dmenu: cannot open display

出于某种原因,您的函数将多个文件名或Vim理解为多个文件名传递给只能处理一个文件名的
:tabe
:e

也许文件名中有空格

替换

execute a:cmd . " " . fname


要查看传递给
:tabe

的内容,主要问题在于您的环境:
无法打开显示。Dmenu需要访问X服务器才能显示其完成菜单。在终端中,您需要定义如下内容

$ export DISPLAY=:0.0
您可以通过执行
dmenu
(或
xclock
,或
gvim
,或任何其他X应用程序)来检查该功能是否正常工作


第二,Vim集成中的命令

execute a:cmd . " " . fname
是错过了适当的逃避;这就是为什么会出现E172错误。要处理各种文件名,请使用

execute a:cmd . " " . fnameescape(fname)

最重要的是,一点防御性的编程就可以阻止这一切。在
system()
之后,最好检查
v:shell\u error
外部命令是否实际成功。

仅弹出“dmenu:cannot open display”。也许我遗漏了一些关于echo的信息,它是否应该显示在vim内部?
echo
应该回显
dmenu
的过滤输出,但它看起来像
dmenu
无论如何都无法运行。由于
dmenu
输出
dmenu:cannot open display
,Vim尝试执行
:tabe dmenu:cannot open display
,这显然无法工作。您必须调查导致
dmenu
失败的原因。或者,这就是我的理解。你拿到文件清单了吗?谢谢你的回答。在终端中运行导出行后无法执行dmenu。寻找其他东西…啊,当我在ec2上通过终端远程运行时,我开始了解dmenu需要额外的魔法?我需要学习如何打开x显示,使其与putty一起工作?当您在Windows上(使用putty)时,您必须安装x服务器,例如Cygwin-x,它是Cygwin的一部分。不过,这是一个主要的软件安装。如果你在Linux上的话会容易得多。我渐渐明白了这一点。它通过MobaXterm和gvim工作,但速度慢得可笑。谢谢,Linux在很多方面都会更好。谢谢!在lawrencium上有问题,我的.vim在一个带有空格的文件夹中。在Windows上直接使用vim穿透腻子。没有意识到dmenu需要X服务器,或者需要什么才能让它在putty中工作。其他终端都配有X服务器,但到目前为止,它们的运行速度太慢,无法发挥作用。
execute a:cmd . " " . fnameescape(fname)