usethis::use_vignette编辑器选择逻辑及emacsclient调用错误排查
问题场景
在R 4.4.1、usethis 3.0.0,Ubuntu 20.04环境下,从shell调用usethis::use_vignette("my-vignette")时出现以下错误:
> usethis::use_vignette("my-vignette") ✔ Setting active project to [omitted]. ✔ Writing vignettes/my-vignette.Rmd. ☐ Modify vignettes/my-vignette.Rmd. sh: 1: emacsclient -a emacs: not found Warning message: error in running command
虽然emacsclient能在任意shell中通过emacsclient [filenamehere] &正常调用,但usethis未明确说明编辑器的配置方式。
解决方法
usethis依赖R的editor()函数调用编辑器,问题出在R的编辑器配置与shell环境不同步,可通过以下两种方式修复:
1. 通过R选项永久配置
编辑你的.Rprofile文件(通常在用户主目录~/.Rprofile,不存在则创建),添加以下内容:
# 直接使用命令,或替换为emacsclient的完整路径 options(editor = "emacsclient &")
若不确定emacsclient的完整路径,可在shell中运行which emacsclient获取,比如结果为/usr/bin/emacsclient,则配置改为:
options(editor = "/usr/bin/emacsclient &")
保存后重启R即可生效。
2. 通过shell环境变量配置
编辑shell的配置文件(比如.bashrc、.zshrc,根据你使用的shell选择),添加:
export EDITOR="emacsclient &"
同样可使用完整路径:
export EDITOR="/usr/bin/emacsclient &"
执行source ~/.bashrc(对应bash)或source ~/.zshrc(对应zsh)使配置生效,再重启R即可。
验证配置
重启R后,运行editor(),若能正常打开emacsclient,则配置成功。此时再调用usethis::use_vignette("my-vignette")将不会出现错误。
原因说明
R的编辑器配置独立于shell环境,即使shell能正常调用emacsclient,R可能因未继承正确的PATH或EDITOR变量而无法找到命令。明确指定编辑器命令或完整路径,可确保R能正确调用编辑器。
内容的提问来源于stack exchange,提问作者pglpm

