Kev*_*ter 7 clojure sublimetext sublimetext2 sublimetext3
我想将SiblimeREPL包与Sublime Text一起使用.当我尝试启动REPL时,我明白了
SublimeREPL: obtaining sane environment failed in getenv()
Check console and 'getenv_command' setting
WARN: Falling back to SublimeText environment
Run Code Online (Sandbox Code Playgroud)
无论我尝试启动哪种REPL,都会发生这种情况.(我尝试过Ruby,Python和Clojure.)我尝试了Sublime Text 2和Sublime Text 3,结果相同.这是在Mac OS X上,如果这很重要.
我查看了包装设置,我看到了
"getenv_command": ["/bin/bash", "--login", "-c", "env"],
Run Code Online (Sandbox Code Playgroud)
如果我在终端提示符下运行"/ bin/bash --login -c env",我会列出我的环境.
为了获得成功的getenv_command,我需要更改什么?
Vec*_*ohn 15
我和ssgam有同样的问题.我的问题在于getenv方法.它调用subprocess.check_output(getenv_command),它在python 2.6中不存在,ST2似乎使用它.
诀窍是,如果getenv_command是真的,它只调用subprocess.check_output(),否则默认为os.environ.copy().因此,为了在不修改SublimeREPL包的情况下获得ssgam的修复,在Preferences> Package Settings> SublimeREPL> Settings - User中,执行以下操作:
{
"getenv_command": false
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我对此问题进行了更深入的研究,看起来SublimeText 3也受到了影响.在我的例子中,问题与bash-completion特性有关,特别是COMP_WORDBREAKS环境变量.
使用以下命令显示COMP_WORDBREAKS的内容:
$ echo "$COMP_WORDBREAKS"
Run Code Online (Sandbox Code Playgroud)
将输出
"'><=;|&(:
Run Code Online (Sandbox Code Playgroud)
您还可以使用:
$ echo $COMP_WORDBREAKS
Run Code Online (Sandbox Code Playgroud)
但请注意,使用第二个命令(不带引号),您将看不到该变量还包含换行符.
这里的问题是换行符,它打破了getenv_command功能中的输出解析.如果您提取SublimeREPL的部分源代码,您可以从python解释器获取真正的错误消息.
Traceback (most recent call last):
File "main.py", line 71, in getenv
env = dict(line.split('=', 1) for line in lines)
ValueError: dictionary update sequence element #6 has length 1; 2 is required
Run Code Online (Sandbox Code Playgroud)
您可以将元素#6与env列表中COMP_WORDBREAKS的位置匹配.
解决方案(首先出现在我的脑海中)
在应用以下解决方案之后,我现在无法判断对bash-completion特性的真正影响,当然SublimeREPL也应该相应地修复.请评论我的答案,以填补缺少的知识.
我们可能想删除令人不安的字符以摆脱错误.首先让我们识别那些角色
$ echo -n "${COMP_WORDBREAKS}" | od -t x1c
Run Code Online (Sandbox Code Playgroud)
将输出
0000000 20 09 0a 22 27 3e 3c 3b 7c 26 28 3a
\t \n " ' > < ; | & ( :
0000014
Run Code Online (Sandbox Code Playgroud)
所以我们要删除三个.最简单的方法是添加到.bashrc以下行:
COMP_WORDBREAKS="${COMP_WORDBREAKS#???}"
Run Code Online (Sandbox Code Playgroud)
瞧!没有更多错误消息.
我最后的想法是删除字符.我不完全了解bash-completion是如何工作的,我知道修改COMP_WORDBREAKS会影响使用它的其他脚本.现在你可以随时改变它.
我希望这有帮助.
干杯
找到了。修复。SublimeREPL 假设运行 getenv_command 将仅产生运行 env 的输出,并且每一行都将包含一个等号。但我的 .bash_profile 将一些内容回显到标准输出。
解决方案是将我的 .bash_profile 输出包装在
if [[ $- == *i* ]]
Run Code Online (Sandbox Code Playgroud)
除了执行的命令之外不产生额外的输出。