当我在Vim中编辑python文件(使用MacVim),并按o
插入新行时,Vim抛出以下错误:
Error detected while processing function <SNR>20_CheckAlign..GetPythonIndent:
line 30:
E121: Undefined variable: dummy
Press ENTER or type command to continue
Error detected while processing function <SNR>20_CheckAlign..GetPythonIndent:
line 30:
E15: Invalid expression: line('.') < 7 ? dummy : synIDattr(synID(line('.'), col('.')
, 1), 'name') =~ '\(Comment\|String\)$'
我该如何解决这个问题?
4条答案
按热度按时间ahy6op9u1#
我发现了这个问题。每当文件的制表符设置与编辑器的制表符设置不同时,它就会抛出一个错误。例如,我的test.py文件被设置为每个制表符2个空格,制表符扩展为空格,而我的编辑器被设置为每个制表符4个空格,没有扩展。
因此,解决方案的变通方法是将Vim的选项卡设置设置为正在编辑的python文件的设置。
cwtwac6a2#
在python文件中使用以下modeline,确保其选项卡设置一致。
或者,您也可以在
.vimrc
文件中设置它们。这些都是你在使用python文件时确保一致性的最小集合。有一些很棒的vimrc例子你也可以使用。
wz3gfoph3#
更改缩进设置对我不起作用,所以我通过修改python缩进文件(/path/to/vim/indent/python.vim)来解决这个问题。
在
GetPythonIndent
函数中,我简单地用0
替换了dummy
的所有示例,这样就解决了这个问题。或者,您可以将
s:maxoff
设置为高得离谱的值,但这有点不太优雅。hivapdat4#
要解决这个问题,似乎必须编辑
/path/to/vim/indent/python.vim
中的函数GetPythonIndent()
。要做到这一点,必须阅读帮助文档,
user_30
,indent
,indentexpr
,和indent-expression
(此外,C-indenting
包含一般信息,将有助于解释发生了什么)。因此,最简单的解决方案是在编辑python文件时关闭缩进,直到有时间处理这个恼人的bug:
在
/path/to/vim/indent/python.vim
中,您将看到表达式被设置为运行有错误的函数GetPythonIndent
:在那里将其设置为
""
,以保存每次打开python文件时取消设置它的不便。上面Dani的回答看起来可能是更好的解决方案,因为它会保留某种形式的自动缩进。但这会给予你立即松一口气,并保存阅读和理解bug函数的时间。