我的vim列表:
let ListRange = []
let ListRange = ['2','3','hello']
我想在python命令中导入列表:
exe "r!python -c \"import random ; print('\\n'.join(format(random.choice(ListRange)) for i in range(14)))\""
这会产生错误:
回溯(最近一次呼叫最后一次):
文件"",第1行,在中
文件"",第1行,在
NameError:全局名称' listrange'未定义
如何在上面的python命令中使用vim列表?
我知道可以在python命令self中声明列表,但我想在vim环境中声明它。
答案 0 :(得分:1)
使用:execute
,您需要仔细区分由Python评估的引用部分和不带引号的部分,即Vim表达式。您的错误是ListRange
是Vim变量,但您已将其包含在引用的Python部分中。
要解决此问题,请将字符串拆分为两部分,然后使用Vim' s ListRange
按字面和不加引号插入string()
以生成列表的文本表示:
exe "r!python -c \"import random ; print('\\n'.join(format(random.choice(" . string(ListRange) . ")) for i in range(14)))\""
你很幸运,Vim和Python的List格式非常相似;它只能起作用(对于这个特定的输入;更复杂的List内容可能会导致失败)。