在Python中键入冒号(:)时防止Vim缩进行

时间:2013-10-11 14:31:31

标签: python vim vi

每当我在Python模式下在Vim中附加:字符时,它都会:

  • 缩进行
  • 该行
  • 什么都不做

它甚至试图做什么,我该如何摆脱这种行为?

4 个答案:

答案 0 :(得分:20)

按下某些键时,将触发Vim的缩进功能,该功能将尝试在当前行上设置正确的缩进量。 (您可以通过在正常模式下键入==来手动触发此操作。)

您可以更改哪些键触发此行为,但首先您需要知道正在使用的缩进模式。

首先,执行:set indentexpr?。如果它是非空的(我希望这对于Python),那么正在使用indentexpr模式。在这种情况下,执行:set indentkeys?会为您提供触发键列表。要删除冒号,请执行:setlocal indentkeys-=:

如果indentexpr为空,那么您可能正在使用cindent模式,而:set cindent?会告诉您cindent已设置。在这种情况下,请执行与以前相同的操作,但使用cinkeys代替indentkeys。 (请注意,indentexpr模式优先于cindent模式。)

答案 1 :(得分:10)

Nathan Grigg's answer让我走上正轨。我必须为我的设置做一些更改。

我必须使用:setlocal indentkeys-=<:>,因为在我的情况下:set indentkeys?显示indentkeys=0{,0},!^F,o,O,e,<:>,=elif,=except

此外,将:setlocal indentkeys-=<:>放入.vim/after/ftplugin/python.vim无法使更改永久化。我发现有一个内置的vim python缩进文件在此ftplugin文件之后运行。

要进行诊断,请打开Python文件进行编辑,然后运行:scriptnames。这将按优先顺序显示已运行的所有vim脚本的列表。该列表底部的脚本最近已应用,并且优先。有关详细信息,请参阅this question on SuperUser

当我这样做时,它向我展示了/my-install-path/vim/7.4.1830/share/vim/vim74/indent/python.vim处的内置vim文件。果然,这是将<:>设置为缩进键的一部分。

为了修复它,我在.vimrc中设置了一个自动命令,这真的得到了最后一个字。

autocmd FileType python setlocal indentkeys-=<:>

<强>更新

毕竟我必须添加:setlocal indentkeys-=:。这就是我现在.vimrc所拥有的内容。

autocmd FileType python setlocal indentkeys-=<:>
autocmd FileType python setlocal indentkeys-=:

答案 2 :(得分:6)

它试图提供帮助。如果要关闭当前文件的所有自动缩进,

:setlocal noautoindent
:setlocal nocindent
:setlocal nosmartindent
:setlocal indentexpr=

或者,您可以在vimrc文件中添加set。您也可以按文件类型执行这些操作。见here

答案 3 :(得分:0)

TL; DR 我通过键入以下内容禁用了自动缩进:

:设置indentexpr =

然后按ENTER键。

这是一种快速解决方案,无需了解 indentkeys ..

感谢Christian Long提供indentkeys的文档,我注意到了(重点):

在“插入”模式下键入时会导致缩进的键列表 当前行。 仅在'indentexpr'不为空时发生

提示-您可能需要保存现有 indentexpr 值的副本,然后再将其清除。要查看(以及设置的任何其他值),只需键入:

:设置

HTH