使用Vim编辑python时出错

kt06eoxx  于 2022-11-30  发布在  Python
关注(0)|答案(4)|浏览(208)

当我在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\)$'

我该如何解决这个问题?

ahy6op9u

ahy6op9u1#

我发现了这个问题。每当文件的制表符设置与编辑器的制表符设置不同时,它就会抛出一个错误。例如,我的test.py文件被设置为每个制表符2个空格,制表符扩展为空格,而我的编辑器被设置为每个制表符4个空格,没有扩展。
因此,解决方案的变通方法是将Vim的选项卡设置设置为正在编辑的python文件的设置。

cwtwac6a

cwtwac6a2#

在python文件中使用以下modeline,确保其选项卡设置一致。

# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4

或者,您也可以在.vimrc文件中设置它们。

set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab

这些都是你在使用python文件时确保一致性的最小集合。有一些很棒的vimrc例子你也可以使用。

wz3gfoph

wz3gfoph3#

更改缩进设置对我不起作用,所以我通过修改python缩进文件(/path/to/vim/indent/python.vim)来解决这个问题。
GetPythonIndent函数中,我简单地用0替换了dummy的所有示例,这样就解决了这个问题。
或者,您可以将s:maxoff设置为高得离谱的值,但这有点不太优雅。

hivapdat

hivapdat4#

要解决这个问题,似乎必须编辑/path/to/vim/indent/python.vim中的函数GetPythonIndent()
要做到这一点,必须阅读帮助文档,user_30indentindentexpr,和indent-expression(此外,C-indenting包含一般信息,将有助于解释发生了什么)。
因此,最简单的解决方案是在编辑python文件时关闭缩进,直到有时间处理这个恼人的bug:

:set indentexpr=""

/path/to/vim/indent/python.vim中,您将看到表达式被设置为运行有错误的函数GetPythonIndent

setlocal indentexpr=GetPythonIndent(v:lnum)

在那里将其设置为"",以保存每次打开python文件时取消设置它的不便。
上面Dani的回答看起来可能是更好的解决方案,因为它会保留某种形式的自动缩进。但这会给予你立即松一口气,并保存阅读和理解bug函数的时间。

相关问题