Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:如何让Emacs向Perl脚本的完整路径添加引号?_Perl_Emacs - Fatal编程技术网

Perl:如何让Emacs向Perl脚本的完整路径添加引号?

Perl:如何让Emacs向Perl脚本的完整路径添加引号?,perl,emacs,Perl,Emacs,令人尴尬的简单问题。在Windows 7 64上的Emacs 23.4.1中使用CPerl模式,当我使用C-C运行脚本时,Emacs不会将路径用引号括起来,因此任何带空格的目录都会导致Perl无法找到该文件。 “C:/Perl64/bin\perl.exe-w g:/foo/bar/first second/myscript.pl” 生成此错误消息: “无法打开perl脚本“g:/foo/bar/first”:没有这样的文件或目录” 问题:如何使Emacs在将文件名传递给Perl本身时使用引号

令人尴尬的简单问题。在Windows 7 64上的Emacs 23.4.1中使用CPerl模式,当我使用
C-C
运行脚本时,Emacs不会将路径用引号括起来,因此任何带空格的目录都会导致Perl无法找到该文件。
“C:/Perl64/bin\perl.exe-w g:/foo/bar/first second/myscript.pl”
生成此错误消息:
“无法打开perl脚本“g:/foo/bar/first”:没有这样的文件或目录”

问题:如何使Emacs在将文件名传递给Perl本身时使用引号


编辑:由于某些原因,我无法发表评论(可能是浏览器问题),因此我正在编辑原始帖子,以回应@legocia的评论:“C-C运行命令模式编译”。在Perl菜单中,它被标记为“Run”。

我只有mode-compile.el v2.29可用,但在该版本中,问题与您描述的完全一样,compile命令的参数没有正确转义,并且没有启用它的选项

这是一个小技巧,但您应该能够在
.emacs
文件中使用以下内容对文件名进行正确转义,从而重新定义相关函数:

(加载后评估”模式编译
"(progn)
(defun mc—shell编译(shell dbgflags和可选错误regexp-list)
;在当前缓冲区上使用调试标志DBGFLAGS运行SHELL
(let*((shcmd(或(mc--哪个外壳)
(错误“编译中止:未找到命令%s”shell)))
(shfile(或mc--远程路径名(缓冲区文件名)
(错误“编译中止:缓冲区%s没有文件名”
(缓冲区名称)
(运行cmd(concat shcmd“dbgflags”“(shell引号参数shfile)”)
(setq mc——外壳参数
(读取字符串(如果模式为-compile-expert-p
“Argv:”
(格式化%s%s脚本的“参数”:
shfile(文件外壳)
mc—shell args(()()))
;如果需要,修改编译错误regexp列表
(如果出现错误,则为regexp)
(项目
;;设置编译错误regexp-alist from compile
(或(listp errors REGEP LIST)
(错误“编译中止:在mc中--shell编译错误regexp-alist不是列表。”)
;将新的regexp列表添加到编译错误regexp列表
(地图车)(λ(x)
(if(mc--member x编译错误regexp-alist)nil
(setq编译错误regexp)
(附加(列表x)
编译错误(regexp(列表)))
错误(regexp)))
;使用Run cmd运行compile
(mc——编译运行cmd(()()))
我换的线路正在换

(运行cmd(concat shcmd“dbgflags”shfile)

(运行cmd(concat shcmd“dbgflags”“(shell引号参数shfile)”)

一个更完整的解决方案是也转义
dbgflags
(无论它们设置在哪里,仅仅转义整个变量都是不正确的)当它们也被设置时,
mc--shell args

C-C-C
似乎是一种非标准绑定。如果你键入
C-h C-C-C
,你会得到什么?
模式编译。el
不是标准的。你是在使用还是其他什么?@phils我不是故意使用
模式编译。el
-我记不起尝试使用过我也不需要直接这样做,因为我使用的语言都是解释语言(R、Perl)。也许它是与ESS一起安装的…?当Perl脚本在缓冲区中时,主模式是CPerl,次模式是Abbrev。没有其他明显的不同。使用
M-x find library RET mode compile RET
打开该库的代码。顶部的注释可能会确定它来自何处(该文件的位置可能会告诉您它是否与ESS一起提供,假设它将其文件保存在一个公共目录下?)宾果,M.Boubaker的mode-compile.el v2.29.1。那么…你建议我下一步做什么?+1,但我建议写信给作者,并在源代码处解决这个问题。另外,如果你在elisp代码前面加上
堆栈溢出,将获得正确的语法突出显示。非常有用的提示,谢谢,实际上,向上游发送补丁始终是w伊瑟。