如何configurationvim不要在编辑python文件的时候在行首加注释

在编辑python文件的时候,当我在Vim中的一个空行插入模式中添加#时,vim将#移动到行首,但是我希望在我input的标签级插入#号。

例如,当在vim中写这个

for i in range(10): # 

#不会留在那里我进入它。

它是这样移动的,由vim。

 for i in range(10): # 

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

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

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

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

我replace了

 set smartindent 

 set cindent 

在我的.vimrc文件中

到目前为止,它的工作是完美的。

这个改变也固定了'<<'和'>>'的行为,用于缩进包含python注释的可视块。

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

@PolyThinker虽然我看到这个问题的答案很多,但我认为这不是一个好的解决scheme。 编辑器仍然认为它应该一直缩进到左边 – 通过在以hash开头的行上按==来检查,或者在包含注释的代码块被重新突出显示时按=。

我强烈build议使用filetype indent on ,然后从你的vimrc中删除set smartindentset autoindent (或者set cindent )行。 其他人(显然David Bustos)非常友好,为我们写了一个完整的缩进parsing器。 它位于$ VIMDIRECTORY / indent / python.vim。

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

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

 set smartindent inoremap # X^H# set autoindent 

而我并没有观察到这个问题。 也许你可以试试这个。 (注意^ H应该由Ctrl-V Ctrl-Hinput)

我的解决scheme#:

如果使用cindent,则认为它是为C和C ++编码而devise的。 在这里,#表示您正在创build#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 

这是由'smartindent'function造成的。 如果你有:set smartindent在你的.vimrc中:set smartindent ,你需要删除它。

其他一些答案是有用的,但是当“#”是第一个字符时,没有一个足以防止Vim重新排列一行。 PolyThinker的回答对我来说不起作用,但是它给出了一个线索,可以将“#”重新映射为“插入一个字符,然后#”,然后删除多余的字符,并把光标放在应该出现的位置。 这是这样的映射:

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

这是需要的,因为vim的语法包似乎把'#'当成一个特殊字符,不pipe如何设置选项。 我想要一个以'#'开始的行与其他任何字符开始的行相同。 我find的最可靠的解决scheme是上面的映射,它实际上改变了行的第一个字符。

注意:我发现这个映射在运行I#<esc>然后按“”之后会导致问题。 重做以前的插入。 我还没有find解决scheme。

我的Vimconfiguration没有这样做。 你可以试试这个链接中的python.vim脚本: http : //www.vim.org/scripts/script.php? script_id=790

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

事实certificate,在~/.vimrc是这一行:

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

一旦我从这一行删除了“smartindent”,那么smartindent终于被禁用了,我的意见又被正确地缩进了。