获取" E484:无法打开文件/ tmp / foo / a"在Vim中使用系统(" wget")时

时间:2014-07-18 21:19:29

标签: vim wget tmp

我有一个抛出错误的小函数。这是功能:

function! GetPHPInfo(function_name)
  let page = system("wget -q -O - 'php.net/" . a:function_name)
  " let page = system("wget -q -O - 'google.com'")
  return page
endfunction

当我从php.info使用wget时,我收到此错误:

E484: Can't open file /tmp/vRXHL5q/7

但不是当我从google.com使用wget时。我认为这是因为谷歌是一个比php.net更小的页面,因此可以写。如何更改tmp文件的允许大小?

1 个答案:

答案 0 :(得分:1)

我认为你的结论是错误的;对临时文件的大小没有限制。相反,我认为这是一个逃避问题。由于传递的函数名中的特殊字符,命令行无效,导致命令失败,因此Vim无法捕获其输出。这是一个创建相同错误的演示(在Windows上):

:echo system('echo "fo"o"')

解决方案

您需要使用shellescape(),至少可以使用包含特殊字符的函数名称:

let page = system("wget -q -O - " . shellescape('php.net/' . a:function_name))

至少,您需要正确关闭单引号:

let page = system("wget -q -O - 'php.net/" . a:function_name . "'")

根据wget的宽松程度,可能还需要额外的网址转义功能。 (那里没有内置功能。)