当我在编辑python文件的Vim中的空行上的插入模式中添加一个#时,vim将#移动到行的开头,但我希望在我输入的标签级别插入#号。如何配置vim在编辑python文件时不在行首加注释
例如,在VIM
for i in range(10):
#
的#不呆在那里,我进入了它写这个的时候。
它是这样移动的,通过vim。
for i in range(10):
#
有没有人知道vim中的配置项会改变这种情况?
如果有帮助,我使用的是Ubuntu 8.10。
当我在编辑python文件的Vim中的空行上的插入模式中添加一个#时,vim将#移动到行的开头,但我希望在我输入的标签级别插入#号。如何配置vim在编辑python文件时不在行首加注释
例如,在VIM
for i in range(10):
#
的#不呆在那里,我进入了它写这个的时候。
它是这样移动的,通过vim。
for i in range(10):
#
有没有人知道vim中的配置项会改变这种情况?
如果有帮助,我使用的是Ubuntu 8.10。
我发现这里http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash
的答案似乎是,VIM smartindent选项是问题的原因。 上面引用的页面描述了工作轮回,但在阅读vim本身的smartindent帮助(:help smartindent)之后,我决定尝试cindent而不是smartindent。
我在.vimrc文件
,到目前为止,它是工作完美替代
set smartindent
与
set cindent
。
此更改还修复了'< <'和'>>'的行为,用于缩进包含python注释的可视块。
在vim帮助smartindent和cindent(:help smartindent和:help cindent)有更多的配置选项和缩进信息。
啊,我在我的.vimrc文件中有“filetype plugin indent on”,也许这是它对我正确工作的原因。 http://vimdoc.sourceforge.net/htmldoc/filetype.html – m0j0 2008-12-09 22:38:29
保存了我的一天。 +1! :) – 2014-05-07 19:55:50
我的Vim配置没有这样做。您可以尝试提供的脚本python.vim从这个链接:http://www.vim.org/scripts/script.php?script_id=790
不幸的是,这并没有在我的情况下,使用它时仍然存在问题。 我使用2.6.3版本,因为我还没有升级到python 3.0。 也许问题出在Ubuntu vim-runtime软件包安装的/usr/share/vim/vim71/indent/python.vim文件中? – 2008-12-09 21:50:06
这是由'smartindent'功能引起的。如果您的.vimrc中有:set smartindent
,则需要将其删除。
我在我的.vimrc以下行,似乎是被默认安装与我的Ubuntu 8.10
set smartindent
inoremap # X^H#
set autoindent
而且我不遵守的问题。也许你可以试试这个。 (请注意,^ H应该通过Ctrl-V Ctrl-H输入)
@PolyThinker虽然我看到这个问题的答案很多,但我认为这不是一个好的解决方案。编辑器仍然认为它应该一直缩进 - 通过在以hash开头的行上按==来检查此操作,或者在包含注释的代码块突出显示时重新按=来检查该操作。
我强烈建议filetype indent on
,并从您的vimrc中删除set smartindent
和set autoindent
(或set cindent
)行。其他人(显然,David Bustos)非常友好,可以为我们编写完整的缩进解析器;它位于$ VIMDIRECTORY/indent/python.vim。
(保罗cindent
解决方案可能适用于Python,但filetype indent on
是更为普遍有用。)
我解决#的,取消缩进:
如果使用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
我从~/.vimrc
删除set smartindent
但它仍然没有禁用smartindent。当我打开一个.py文件并运行:set smartindent?
时,它显示smartindent
。
原来,在~/.vimrc
进一步下跌是这一行:
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class
^^^^^^^^^^^
一旦我删除了“smartindent”从该行,然后smartindent终于残疾人和我的意见是缩进重新正常。
其他一些答案很有用,但没有一个足以防止Vim在'#'是第一个字符时重新排线。 PolyThinker的回答对我不起作用,但它给出了一条线索,可以将'#'重新映射为“插入一个字符,然后#,然后删除多余的字符并将光标放在应该出现的位置”。这是做了映射:
inoremap # X#<left><backspace><right>
这是必要的,因为vim的语法包似乎把“#”作为一个特殊的人物,不管这些选项的设置。我希望以'#'开头的行与其他任何角色开始的行相同。我找到的最可靠的解决方案是上面的映射,它实际上确实改变了行的第一个字符。
注意:我发现这个映射在运行I#<esc>
然后按下“。”后会导致问题。重做以前的插入。我还没有找到解决方案。
另请参阅:http://stackoverflow.com/questions/191201/indenting-comments-to-match-code-in-vim – Dan 2010-05-13 23:39:17