`.sublime-build如何工作?

use*_*114 5 macos r build rscript sublimetext3

更新:

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

我可能已经确定了潜在的问题:字符编码.在崇高的文本使用我的生成变异,在我的前面YAML事项附加符号.Rmd文件导致从那些最初描述,我似乎不再得到不同的错误(这要求原来这里的问题时,我一直在做):

Error en yaml::yaml.load(front_matter)
Run Code Online (Sandbox Code Playgroud)

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

在对这个问题的评论中,我试图对我做各种各样的事情"$PATH",因为它们对于@RandyLai来说似乎没有必要; 我特别是指在添加路径pandoc/etc/launchd.config:具有还原默认路径之后/usr/bin:/bin:/usr/sbin:/sbin,一切工作以ST为我描述现在,不管我用我的体型变体SublimeKnitr-knitr.sublime-buildR Box-R Markdown.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=
Run Code Online (Sandbox Code Playgroud)

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

在我的Mac上(v10.9.3)崇高的文本3我已经创建了两个自定义生成变异SublimeKnitrknitr-MarkdownR型箱体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')\""
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我.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')\""
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

在我的自定义生成变种我已经同时使用一对密钥的尝试cmdshell,以及shell_cmd如上面提到的代码,我相信这是新ST3.在任何情况下,两者都会在我运行时在终端中发生不受欢迎的事情:

Rscript -e "rmarkdown::render(input = 'path/to/file.Rmd')"
Run Code Online (Sandbox Code Playgroud)

当我在RStudio中跑步时:

rmarkdown::render(input = 'path/to/file.Rmd')
Run Code Online (Sandbox Code Playgroud)

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

  1. 与映射:

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

    我明白了:

    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]
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,我确实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.
    
    Run Code Online (Sandbox Code Playgroud)
  2. 与映射:

    "shell_cmd": "Rscript -e \"rmarkdown::render(input = '$file')\""
    
    Run Code Online (Sandbox Code Playgroud)

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

    pandoc: YAML header is not an object "source" (line 1, column 1)
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,如果像上面引用的原始构建配置一样,我使用括号" [ ",如下所示:

    "shell_cmd": [ "Rscript -e \"rmarkdown::render(input = '$file')\"" ]
    
    Run Code Online (Sandbox Code Playgroud)

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

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

Rscript -e "rmarkdown::render(input = 'path/to/file.Rmd')"
Run Code Online (Sandbox Code Playgroud)

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

Ran*_*Lai 2

看来你的系统不是英文的。当您在终端中运行 R 时,由于“LC_CTYPE”是 utf-8,因此 R 会将文档读取为 UTF-8 文档。但是,如果在 Sublime 内部启动该命令,“LC_CTYPE”为空,因此 R 不知道要使用什么编码。

有几种解决方案。

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

  2. 另一种可能的方法是将 LANG=en_US.UTF-8 添加到 ~/.Renviron,将 R 默认语言环境更改为 utf8

  3. 另一种可能的解决方案是在 .sublime-build 文件中添加变量 LANG。在这里检查选项 env

  4. 或者在rmarkdown::render函数中指定UTF8编码。