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

防止Vim在Python中键入冒号(:)时缩进行,python,vim,vi,Python,Vim,Vi,每当我在Python模式下在Vim中添加:字符时,它: 使行缩进 删除该行 无所事事 它到底想做什么?我该如何摆脱这种行为?它试图提供帮助。如果要关闭当前文件的所有自动缩进 :setlocal noautoindent :setlocal nocindent :setlocal nosmartindent :setlocal indentexpr= 或者,您可以在vimrc文件中添加集合。您也可以按文件类型执行这些操作。请参阅按下某些键时,将触发Vim的缩进功能,该功能将尝试在当前行上设置

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

  • 使行缩进
  • 删除该行
  • 无所事事

它到底想做什么?我该如何摆脱这种行为?

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

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

或者,您可以在vimrc文件中添加集合。您也可以按文件类型执行这些操作。请参阅

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

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

首先,执行
:设置indentexpr?
。如果它是非空的(我希望Python也是如此),那么将使用
indentexpr
模式。在这种情况下,执行
:set indentkeys?
将提供触发键列表。要删除冒号,请执行
:setlocalindentkeys-=:

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

将我设置在正确的轨道上。我不得不对我的设置做一些更改

我不得不使用
:setlocalindentkeys-=
,因为在我的例子中
:setindentkeys?
显示
indentkeys=0{,0}^F、 o,o,e,,=elif,=除此之外

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

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

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

为了解决这个问题,我在.vimrc中设置了一个自动命令,这才是最后一句话

autocmd FileType python setlocal indentkeys-=<:>
TL;DR I通过键入以下内容禁用自动缩进:

:设置indentexpr=

然后按回车键

这是一个快速解决方案,无需了解密钥

感谢您的文档,我注意到(我的重点):

在插入模式下键入时导致重新识别的键的列表 当前行。仅当“indentexpr”不为空时发生

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

:设置


HTH

为什么您认为它可能试图缩进一行?如中所示,
字符用于表示函数或控制语句……您真正想要什么样的行为?这发生在我身上,但我意外地在Ubuntu中从德语键盘切换到了美国键盘。@YXD它们还用于将dict键与值相关联,但在这些情况下,我都不希望它缩进当前行(即带有冒号的行)。如果您的数据结构中有一个URL呢?它是一个包含冒号的字符串。这也会破坏已设置的缩进。但这不会在会话中持续存在,并且添加到
。vimrc
也不会有帮助,因为Python的自定义设置是在之后加载的。请尝试将其放入.vim/after/ftplugin/Python.vim,edi在python文件中,
:设置缩进键?
显示了
indentkeys=0{,0},!^F,o,o,e,=elif,=除了
。请参见如何在大于和小于字符的范围内指定冒号
。要在我的示例中实现此功能,我必须这样做:
:设置本地缩进键-=
。另请参见,和。(这些都是指向在线vim文档的链接)谢谢@ChristianLong,注释键文档显示了
之间的区别。我只需要
行就可以撤销python模式插件中的设置。更新中的第二行意味着必须打开
作为缩进键
autocmd FileType python setlocal indentkeys-=<:>
autocmd FileType python setlocal indentkeys-=: