在vim中将注释缩进以匹配代码

46

我在vim中编写代码并感到很满意(因此,请不要回答“使用其他编辑器”),但是智能缩进功能会让以#开头的注释完全不缩进,这一点一直令人不爽。例如,我想要:

  # Do something
  $x = $x + 1;
  if ($y) {
    # Do something else
    $y = $y + $z;
  }

使用vim推荐的方式

# Do something
  $x = $x + 1;
  if ($y) {
# Do something else
    $y = $y + $z;
  }

我能够防止评论被发送到行首的唯一方法是在按 # 键之前在该行插入并删除一个字符(每次都要记得做这件事很麻烦),或者完全关闭 smartindent (失去自动缩进增加/减少,因为我打开/关闭大括号)。

如何设置 vim 以保持我的缩进注释而不是将它们发送到行首?

4个回答

48

看起来你正在使用Perl编码。请确保在你的 .vimrc 文件中设置了以下内容:

filetype plugin indent on
syntax enable

以下设置将告诉Vim在打开缓冲区时设置文件类型并配置缩进和语法高亮。无需显式设置smartindent,因为Vim包含的Perl语法文件将自动设置它(以及任何其他针对Perl的自定义设置)。


注意: 在~/.vimrc文件中具有set smartindent和/或set autoindent可能会阻止解决方案正常工作。如果您遇到问题,请查找这些设置。


2
奇怪...我并没有期望这会有任何作用,因为我已经得到了正确的语法高亮,但是这确实可以正确处理注释。可能缩进插件默认没有被加载? - Dave Sherohman
据我所知,它没有按文件类型配置加载。一些发行版打包者会修改系统默认设置以按文件类型加载插件,但是当移动到具有“真正的”或不同配置的系统默认时,这会导致问题。 - Richard Waite
3
完全没有帮助!我仍然被这个在工作中的Windows电脑上的缩进问题困扰。(我想念gg=G) - Johan
4
看起来设置了smartindent会覆盖这个功能。所以删除vimrc中的该设置也可以帮助解决问题。 - Tomas Sedovic
2
还需要设置 set noautoindent。如果 smartindentautoindent 中有任何一个被设置了,它们将覆盖文件类型的设置。 - Alexander Garden
显示剩余2条评论

18
如果您正在使用"smartindent"缩进选项,则您的问题的解决方案在":help smartindent" VIM文档中有详细说明:
    When typing '#' as the first character in a new line, the indent for
    that line is removed, the '#' is put in the first column.  The indent
    is restored for the next line.  If you don't want this, use this
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
    When using the ">>" command, lines starting with '#' are not shifted
    right.

我使用"smartindent",可以确认所描述的修复方法对我有效。它通过将"#"键的按键替换为键入"X",然后按下退格键,再键入"#"来欺骗VIM。您可以手动尝试这个方法,并看到它不会触发自动缩排。


11

这个问题可以通过在你的_vimrc文件中添加以下内容来解决。

set cindent
set cinkeys=0{,0},!^F,o,O,e " default is: 0{,0},0),:,0#,!^F,o,O,e

更多信息...


请注意,Richard Waite的回答要好得多。Vim知道如何正确缩进大多数文件,请让它自行处理。 - Zathrus
2
我会在这里留下我的答案,以防万一有人正在使用不支持文件类型插件的旧版本Vim,但我建议尽可能使用Richard Waite的解决方案。 - Ben Hoffstein

7

我认为 "smartindent" 是为 C 设计的,因此它认为 "#" 是预处理器指令的开始,而不是注释。我不知道解决方法,除非您键入一个空格,然后退格,然后键入 "#",它就不会这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接