每当我:
在 Python 模式下在 Vim 中附加一个字符时,它要么:
- 缩进行
- 凹痕线
- 什么也没做
它甚至试图做什么,我该如何摆脱这种行为?
某些键在按下时会触发 Vim 的缩进功能,它会尝试在当前行设置正确的缩进量。==
(您可以通过在正常模式下键入来手动触发此操作。)
您可以更改触发此行为的键,但首先您需要知道正在使用哪种缩进模式。
首先,执行:set indentexpr?
. 如果它是非空的(我希望这适用于 Python),则indentexpr
使用模式。在这种情况下,执行:set indentkeys?
会为您提供触发键列表。要删除冒号,请执行:setlocal indentkeys-=:
.
如果indentexpr
为空,那么您可能正在使用cindent
模式,并:set cindent?
会告诉您cindent
已设置。在这种情况下,请执行与之前相同的操作,但使用cinkeys
代替indentkeys
. (请注意,indentexpr
模式优先于cindent
模式。)
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-=:
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
TL;DR我通过键入以下内容禁用了自动缩进:
:set indentexpr=
然后按 ENTER 键。
这是一个快速修复,无需了解缩进键..
感谢Christian Long提供了indentkeys的文档,我注意到了(我的重点):
在插入模式下键入时会导致当前行重新缩进的键列表。 仅当 'indentexpr' 不为空时才会发生。
提示 -在清除它之前,您可能希望保存indentexpr的现有值的副本。要查看它(以及设置的任何其他值),只需键入:
:放
HTH