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

Vla*_*hev 29 python vi vim

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

  • 缩进线
  • 在线
  • 什么也没做

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

Nat*_*igg 23

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

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

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

如果indentexpr为空,那么您可能正在使用cindent模式,并:set cindent?会告诉您cindent已设置.在这种情况下,请像以前一样,但使用cinkeys而不是indentkeys.(请注意,indentexpr模式优先于cindent模式.)

  • 但是这不会在会话中持续存在,并且添加到`.vimrc`也无济于事,因为之后会加载Python的自定义设置. (2认同)
  • 尝试将其放入 .vim/after/ftplugin/python.vim (2认同)
  • 对我来说,编辑一个Python文件`:set indentkeys?`显示`indentkeys = 0 {,0},!^ F,o,O,e,<:>,= elif,= except`。查看如何在大于和小于字符'<:>'内指定冒号。为了使它在我的情况下起作用,我必须这样做:`:setlocal indentkeys-= <:>`。 (2认同)

Chr*_*ong 13

Nathan Grigg的回答让我走上正轨.我必须为我的设置做一些更改.

我不得不使用: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脚本的列表.该列表底部的脚本最近已应用,并且优先.有关详细信息,请参阅SuperUser上的此问题.

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

为了解决这个问题,我在.vimrc中设置了一个autocommand,这真的得到了最后一个字.

autocmd FileType python setlocal indentkeys-=<:>
Run Code Online (Sandbox Code Playgroud)

更新

:setlocal indentkeys-=:毕竟我不得不加.这就是我.vimrc现在拥有的东西.

autocmd FileType python setlocal indentkeys-=<:>
autocmd FileType python setlocal indentkeys-=:
Run Code Online (Sandbox Code Playgroud)


doc*_*ove 7

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

:setlocal noautoindent
:setlocal nocindent
:setlocal nosmartindent
:setlocal indentexpr=
Run Code Online (Sandbox Code Playgroud)

或者,您可以在vimrc文件中添加set.您也可以按文件类型执行这些操作.看到这里