当我在编辑python文件时在Vim中的空行上添加#插入模式时,vim会将#移动到行的开头,但是我希望将#插入到我输入它的选项卡级别
例如,在vim中写这个时
for i in range(10):
#
#不会留在我输入的地方。
它是这样移动的,由vim。
for i in range(10):
#
有没有人知道vim中的配置项会改变这个?
如果有帮助,我使用的是Ubuntu 8.10。
答案 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 smartindent
和set 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最终被禁用,我的评论再次缩进。