每当我在Python模式下在Vim中附加:
字符时,它都会:
它甚至试图做什么,我该如何摆脱这种行为?
答案 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