46

每当我:在 Python 模式下在 Vim 中附加一个字符时,它要么:

  • 缩进行
  • 凹痕线
  • 什么也没做

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

4

4 回答 4

33

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

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

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

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

于 2014-02-17T03:29:38.363 回答
21

Nathan Grigg 的回答让我走上了正轨。我必须对我的设置进行一些更改。

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

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

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

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

为了解决这个问题,我在 .vimrc 中设置了一个自动命令,这确实是硬道理。

autocmd FileType python setlocal indentkeys-=<:>

更新

:setlocal indentkeys-=:毕竟我不得不补充。这就是我.vimrc现在所拥有的。

autocmd FileType python setlocal indentkeys-=<:>
autocmd FileType python setlocal indentkeys-=:
于 2016-06-17T19:56:25.023 回答
7

It is trying to be helpful. If you want to turn off all the auto-indenting for the current file,

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

Or, you can add set in your vimrc file. You can do these per file type too. See here

于 2013-10-11T14:38:48.347 回答
0

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

:set indentexpr=

然后按 ENTER 键。

这是一个快速修复,无需了解缩进键..

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

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

提示 -在清除它之前,您可能希望保存indentexpr的现有值的副本。要查看它(以及设置的任何其他值),只需键入:

:放

HTH

于 2020-04-14T14:56:45.527 回答