如何在编辑python文件时将vim配置为不在行的开头放置注释

时间:2008-12-09 20:21:41

标签: python vim

当我在编辑python文件时在Vim中的空行上添加#插入模式时,vim会将#移动到行的开头,但是我希望将#插入到我输入它的选项卡级别

例如,在vim中写这个时

for i in range(10):
    #

#不会留在我输入的地方。

它是这样移动的,由vim。

for i in range(10):
#

有没有人知道vim中的配置项会改变这个?

如果有帮助,我使用的是Ubuntu 8.10。

8 个答案:

答案 0 :(得分:31)

我在这里找到了答案http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

似乎vim smartindent选项是导致问题的原因。 上面引用的页面描述了工作轮次,但在阅读了vim本身的smartindent帮助后(:help smartindent),我决定尝试使用cindent而不是smartindent。

我替换了

set smartindent

set cindent

在我的.vimrc文件中

到目前为止它运作良好。

此更改还修复了'<<'的行为和'>>'用于缩进包含python注释的可视块。

smartindent和cindent的vim帮助中有更多配置选项和缩进信息(:help smartindent和:help cindent)。

答案 1 :(得分:20)

@PolyThinker虽然我对这个问题有很多回应,但在我看来,这不是一个好的解决方案。编辑器仍然认为它应该一直向左缩进 - 通过在一个以哈希开头的行上按= =来检查这一点,或者在一个带有注释的代码块被突出显示为reindent时检查=。

我强烈推荐filetype indent on,并从您的vimrc中删除set smartindentset autoindent(或set cindent)行。其他人(显然是David Bustos)非常友好地为我们写了一个完整的缩进解析器;它位于$ VIMDIRECTORY / indent / python.vim。

(Paul的cindent解决方案可能适用于python,但filetype indent on通常更有用。)

答案 2 :(得分:12)

我的.vimrc中有以下几行,默认情况下我的Ubuntu 8.10似乎已安装

set smartindent
inoremap # X^H#
set autoindent

我没有观察到这个问题。也许你可以试试这个。 (注意^ H应该通过Ctrl-V Ctrl-H输入)

答案 3 :(得分:4)

我解决了#:

的问题

如果使用cindent,请认识到它是专为C和C ++编码而设计的。这里,#表示您正在创建#DEFINE或#MACRO(),因此行为是正确的。但对于#是评论的其他语言来说,这很令人恼火。

以下对我有用:

" cindent       enable specific indenting for C code
" set cin       nocin
set cin

" cinkeys       The default cinkeys causes leading # to unindent to column 0.
"               To prevent this, remove the 0# from the definition.
" set cinkeys=0{,0},0),:,0#,!^F,o,O,e - default
set cinkeys=0{,0},0),:,!^F,o,O,e

答案 4 :(得分:2)

这是由'smartindent'功能引起的。如果.vimrc中有:set smartindent,则需要将其删除。

答案 5 :(得分:2)

其他一些答案很有用,但是当'#'是第一个字符时,没有一个足以阻止Vim重新排队。 PolyThinker的答案对我不起作用,但它提供了一个线索,'#'可以重新映射为“插入一个字符,然后#,然后删除额外的字符并将光标放在应该的位置”。这是执行该操作的映射:

inoremap # X#<left><backspace><right>

这是必需的,因为无论如何设置选项,vim的语法包似乎都将'#'视为特殊字符。我希望以“#”开头的行与以任何其他字符开头的行相同。我发现的最可靠的解决方案是上面的映射,它确实改变了行的第一个字符。

注意:我发现此映射在运行I#<esc>然后按“”后会导致问题。重做以前的插入。我还没有找到解决方案。

答案 6 :(得分:1)

我的Vim配置不会这样做。您可以尝试使用此链接提供的python.vim脚本:http://www.vim.org/scripts/script.php?script_id=790

答案 7 :(得分:0)

我从set smartindent删除了~/.vimrc,但它仍未禁用smartindent。当我打开.py文件并运行:set smartindent?时,它显示smartindent

事实证明,~/.vimrc中的下行是这一行:

autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
                         ^^^^^^^^^^^

一旦我从该行删除了“smartindent”,那么smartindent最终被禁用,我的评论再次缩进。