如何配置vim,使其在编辑python文件时不在行的开头添加注释
当我在编辑python文件时在Vim中的空行上添加插入模式下的#时,Vim会将#移动到行的开头,但我希望在我输入的选项卡级别插入# 例如,在vim中编写此文件时如何配置vim,使其在编辑python文件时不在行的开头添加注释,python,vim,Python,Vim,当我在编辑python文件时在Vim中的空行上添加插入模式下的#时,Vim会将#移动到行的开头,但我希望在我输入的选项卡级别插入# 例如,在vim中编写此文件时 for i in range(10): # 那辆车没有停在我进去的地方 它像这样被维姆移动 for i in range(10): # 有人知道vim中的配置项会改变这一点吗 如果有帮助的话,我使用的是Ubuntu 8.10。我的Vim配置没有做到这一点。您可以尝试从以下链接获得的python.vim脚本:我在这里找到了答案
for i in range(10):
#
那辆车没有停在我进去的地方
它像这样被维姆移动
for i in range(10):
#
有人知道vim中的配置项会改变这一点吗
如果有帮助的话,我使用的是Ubuntu 8.10。我的Vim配置没有做到这一点。您可以尝试从以下链接获得的python.vim脚本:我在这里找到了答案 vim smartindent选项似乎是问题的原因。 上面引用的页面描述了一轮一轮的工作,但是在阅读了vim本身的smartindent中的帮助(:help smartindent)之后,我决定尝试cindent而不是smartindent 我换了
set smartindent
与
在我的.vimrc文件中
到目前为止,它工作得很好
此更改还修复了“”缩进包含python注释的可视块的行为
有关缩进和缩进的vim帮助中有更多的配置选项和信息(:help smartindent和:help cindent)。这是由“smartindent”功能引起的。如果你有
:在你的.vimrc中设置smartindent
,你需要删除它。我在我的.vimrc中有以下几行,似乎是默认情况下与我的Ubuntu 8.10一起安装的
set smartindent
inoremap # X^H#
set autoindent
我没有注意到这个问题。也许你可以试试这个。(请注意,^H应该由Ctrl-V Ctrl-H输入)@PolyThinker虽然我看到了对这个问题的很多回答,但我认为这不是一个好的解决方案。编辑器仍然认为它应该一直缩进到左侧-在以哈希开头的行上按==检查这一点,或者在突出显示带有注释的代码块以重新缩进时按==检查这一点 我强烈建议在上使用
文件类型缩进,并从vimrc中删除设置智能缩进
和设置自动缩进
(或设置cindent
)行。其他人(appparently David Bustos)非常友好地为我们编写了一个完整的缩进解析器;它位于$VIMDIRECTORY/indent/python.vim
(Paul的cindent
解决方案可能适用于python,但上的文件类型缩进通常更有用。)我的解决方案是取消#
如果使用cdiNT,请识别它是为C和C++编码而设计的。这里,a#表示您正在创建一个#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>
inoremap#X#
这是必需的,因为vim的语法包似乎将“#”视为一个特殊字符,无论选项如何设置。我希望以“#”开头的行与以任何其他字符开头的行相同。我找到的最可靠的解决方案是上面的映射,它实际上改变了行的第一个字符
注意:我发现在运行I#
然后按“.”重新执行上一次插入后,此映射会导致问题。我还没有找到解决方案。不幸的是,这在我的情况下不起作用,使用它时问题仍然存在。我使用了2.6.3版,因为我还没有升级到python 3.0。也许问题出在从Ubuntu vim运行时软件包安装的/usr/share/vim/vim/vim71/indent/python.vim文件中?啊,我的.vimrc中有“filetype plugin indent on”,也许这就是它对我正常工作的原因。救了我一天+1 ! :)对于cindent
,是否有任何推荐的/常用的配置设置?这让我一直很恼火,我最终花了5分钟来修复它(听起来像是大多数vim问题,对吧?)。谢谢你的面包屑!另见:谢谢-这帮了我的忙。我遇到了一个问题,那就是我在gvim(MacVim)中尝试“文件类型缩进”,但没有看到任何行为改变。一旦我开始将它添加到.vimrc中进行测试,然后重新启动,我看到行为发生了变化。同样的问题,尝试了可接受的解决方案(和排列),在.vimrc的末尾放置了“filetye indent on”,而现在,注释python不会删除/删除。但现在这东西对我来说是自动缩进的。唉,关闭smartindent对我不起作用(在ubuntu vim和osx mac vim上)。将“filetype indent on”添加到my$HOME/.vimrc并重新启动[g]vim解决了我的问题(在python和bash脚本编辑中)。此修复程序在文档中有概述(:help smartindent
)。我认为set autoindent
是多余的<代码>智能缩进
包括它
inoremap # X#<left><backspace><right>