Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何配置vim,使其在编辑python文件时不在行的开头添加注释_Python_Vim - Fatal编程技术网

如何配置vim,使其在编辑python文件时不在行的开头添加注释

如何配置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脚本:我在这里找到了答案

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

例如,在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>