`.sublime-build如何工作?

时间:2014-06-16 00:01:37

标签: r macos build sublimetext3 rscript

更新

在对这个问题的评论中详细介绍了各种各样的事情之后,我的问题已经发生了变化。之前在这个问题中描述的问题可能确实是由于@ apple16所建议的错误的JSON,或者与我的"$PATH"配置有关,正如@RandyLai所讨论的那样。

我可能已经确定了潜在的问题:字符编码。在我的.Rmd文档的YAML前端中使用我的构建变体Sublime Text和变音符号(我在这里询问原始问题时一直在做)导致错误与最初描述的错误不同,我不再似乎得到:

Error en yaml::yaml.load(front_matter)

有趣的是,在RStudio或终端(或从shell脚本)中使用相同的YAML时,不会抛出此错误。当我从YAML中删除变音符号时,我在ST中没有错误;但是,如果我将变音符号放在主文档中,则会在生成的HTML中将其呈现为NA。这种类似于我之前发生的事情,我在下面描述为" wackily错误" HTML输出。

在对这个问题的评论中,我试图对我的"$PATH"做各种事情,现在,正如@RandyLai所做的那样,似乎没有必要;我指的是将pandoc的路径添加到/etc/launchd.config:在恢复默认路径/usr/bin:/bin:/usr/sbin:/sbin之后,一切都在ST中工作,因为我现在正在描述它,是否使用我的构建变体在SublimeKnitr-knitr .sublime-buildR Box-R Markdown' s .sublime-build中。

以下是我的语言环境信息,如果有用的话:

Mi-Mac:~ LeGastronome$ locale
LANG=
LC_COLLATE="C"
LC_CTYPE="UTF-8"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

我试图找出Sublime Text如何执行其.sublime-build文件。

在Mac上的Sublime Text 3(v10.9.3)中,我为SublimeKnitr knitr-MarkdownR Box' s创建了一个自定义构建版本R Markdown语法;这是前者的.sublime-build文件,它具有完整功能的原始/默认版本,后跟我的错误版本:

{
  "selector": "text.html.markdown.knitr",
  "working_dir": "${project_path:${folder}}",
  "cmd": [ "Rscript -e \"library(knitr); knit('$file', output='$file_path/$file_base_name.md')\"" ],
  "shell": true,

  "variants":
  [
    {
      "name": "Render",
      "working_dir": "$file_path",
      "shell_cmd": "Rscript -e \"rmarkdown::render(input = '$file')\""
    }
  ]
}

这是我的.sublime-build对于R Box的R Markdown,这与SublimeKnitr的knitr-Markdown构建非常相似:

{
    "selector": "text.html.rmarkdown",
    "working_dir": "${project_path:${folder}}",
    "cmd": [ "Rscript -e \"library(knitr); knit('$file', output='$file_path/$file_base_name.md')\"" ],
    "shell": true,

  "variants":
  [
    {
      "name": "Render",
      "working_dir": "$file_path",
      "shell_cmd": "Rscript -e \"rmarkdown::render(input = '$file')\""
    }
  ]
}

在我的自定义构建变体中,我尝试使用上面代码中引用的一对密钥cmdshell以及shell_cmd,我相信这是新的ST3。在任何情况下,两者都会在我运行时发生不良事件,在终端:

Rscript -e "rmarkdown::render(input = 'path/to/file.Rmd')"

当我在RStudio中跑步时:

rmarkdown::render(input = 'path/to/file.Rmd')

我使用SublimeKnitr的构建得到了与使用R Box的构建时相同的结果。我得到的输出如下:

  1. 使用映射:

    "cmd": [ "Rscript -e \"rmarkdown::render(input = '$file')\"" ],
    "shell": true
    

    我明白了:

    Error: pandoc version 1.12.3 or higher is required and was not found.
    Ejecuci'on interrumpida
    [Finished in 0.4s with exit code 1]
    [cmd: ['Rscript -e "rmarkdown::render(input = \'/path/to/file.Rmd\')"']]
    [dir: /path/to/pertinent/directory]
    [path: /usr/bin:/bin:/usr/sbin:/sbin]
    

    请注意,我确实安装了pandoc并且完全可以运行,例如:

    Mi-Mac:~ LeGastronome$ pandoc --version
    pandoc 1.12.4.2
    Compiled with texmath 0.6.6.1, highlighting-kate 0.5.8.1.
    Syntax highlighting is supported for the following languages:
        actionscript, ada, apache, asn1, asp, awk, bash, bibtex, boo, c, changelog,
        clojure, cmake, coffee, coldfusion, commonlisp, cpp, cs, css, curry, d,
        diff, djangotemplate, doxygen, doxygenlua, dtd, eiffel, email, erlang,
        fortran, fsharp, gcc, gnuassembler, go, haskell, haxe, html, ini, isocpp,
        java, javadoc, javascript, json, jsp, julia, latex, lex, literatecurry,
        literatehaskell, lua, makefile, mandoc, markdown, matlab, maxima, metafont,
        mips, modelines, modula2, modula3, monobasic, nasm, noweb, objectivec,
        objectivecpp, ocaml, octave, pascal, perl, php, pike, postscript, prolog,
        python, r, relaxngcompact, restructuredtext, rhtml, roff, ruby, rust, scala,
        scheme, sci, sed, sgml, sql, sqlmysql, sqlpostgresql, tcl, texinfo, verilog,
        vhdl, xml, xorg, xslt, xul, yacc, yaml
    Default user data directory: /Users/LeGastronome/.pandoc
    Copyright (C) 2006-2014 John MacFarlane
    Web:  http://johnmacfarlane.net/pandoc
    This is free software; see the source for copying conditions.  There is no
    warranty, not even for merchantability or fitness for a particular purpose.
    
  2. 带有映射:

    "shell_cmd": "Rscript -e \"rmarkdown::render(input = '$file')\""
    

    我得到了所需类型的文档HTML,但是HTML很糟糕,与我从Terminal和RStudio运行前面提到的代码时所得到的不同;另外,仅在Sublime Text中我收到以下警告:

    pandoc: YAML header is not an object "source" (line 1, column 1)
    

    请注意,如果像上面引用的原始版本配置一样,我使用括号" ["像这样:

    "shell_cmd": [ "Rscript -e \"rmarkdown::render(input = '$file')\"" ]
    

    当我尝试运行构建变体时,Sublime不会构建也不会执行任何操作。

  3. 我的问题似乎是特定于用户的,因此我正在寻找有关如何执行.sublime-build文件的更准确信息。我从some unofficial documentation了解到默认情况下会运行一些Python;但是,如上所述,当我从终端运行相同的代码时,如何包含在我的构建变体中,即:

    ,怎么可能呢?
    Rscript -e "rmarkdown::render(input = 'path/to/file.Rmd')"
    

    我从Sublime Text获得了不同的结果?谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

您的系统似乎不是英文版。在终端中运行R时,由于“LC_CTYPE”为utf-8,因此R将读取文档为UTF-8文档。但是,如果在Sublime内启动命令,则“LC_CTYPE”为空,因此R不知道要使用的编码。

有几种解决方案。

  1. 最简单但不太吸引人的解决方案是将系统语言切换为英语。

  2. 另一种可能的方法是通过将LANG = en_US.UTF-8添加到〜/ .Renviron

  3. 将R默认语言环境更改为utf8
  4. 另一种可能的解决方案是在.sublime-build文件中添加变量LANG。检查选项env here

  5. 或者在rmarkdown :: render function中指定UTF8编码。