如何配置vim在编辑Python文件时不在行首添加注释

53 投票
8 回答
8030 浏览
提问于 2025-04-11 20:24

在使用Vim编辑Python文件时,如果我在空行的插入模式下输入一个#,Vim会把这个#移动到行的最前面。但我希望这个#能保持在我输入的位置,也就是我按下Tab的地方。

比如说,当我在Vim中写这个:

for i in range(10):
    #

这个#并不会停留在我输入的位置。

Vim会把它移动成这样:

for i in range(10):
#

有没有人知道Vim中有什么设置可以改变这个行为吗?

顺便提一下,我使用的是Ubuntu 8.10。

8 个回答

12

我在我的 .vimrc 文件里有以下几行,这些似乎是我在 Ubuntu 8.10 系统中默认安装的。

set smartindent
inoremap # X^H#
set autoindent

而且我没有发现什么问题。也许你可以试试这个。(注意,输入 ^H 要按 Ctrl-V 然后再按 Ctrl-H)

22

@PolyThinker 虽然我看到很多人对这个问题的回答都是这样,但我觉得这并不是个好办法。编辑器还是认为代码应该靠左对齐——你可以通过在以#开头的行上按==,或者在高亮的代码块中按=来检查重新缩进的效果。

我强烈建议使用 filetype indent on,并且把你的vimrc文件中的 set smartindentset autoindent(或者 set cindent)这几行删掉。还有其他人(显然是David Bustos)很贴心地为我们写了一个完整的缩进解析器;它的位置在 $VIMDIRECTORY/indent/python.vim。

(Paul的 cindent 解决方案可能对Python有效,但 filetype indent on 更加通用。)

35

我在这里找到了解决办法 http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

看起来是vim的智能缩进(smartindent)选项导致了这个问题。上面提到的页面介绍了一些解决方法,但在阅读了vim中关于智能缩进的帮助文档(:help smartindent)后,我决定试试cindent,而不是继续用智能缩进。

我在我的.vimrc文件中把

set smartindent

替换成

set cindent

到目前为止,这个方法运行得很好。

这个改动还修复了'<<'和'>>'在缩进包含Python注释的可视块时的表现。

关于缩进的更多配置选项和信息,可以在vim的帮助文档中找到智能缩进和cindent的相关内容(:help smartindent 和 :help cindent)。

撰写回答