46

我在 vim 中完成所有编码并且对此非常满意(所以,请不要“使用不同的编辑器”响应),但一直有一个烦恼,因为 smartindent 功能根本不想缩进以 # 开头的注释。例如,我想要

  # 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

4 回答 4

47

看起来您正在使用 Perl 进行编码。确保在 .vimrc 中设置了以下内容:

filetype plugin indent on
syntax enable

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


注意:有一个set smartindent和/或可能set autoindent~/.vimrc阻止解决方案工作。如果您遇到问题,请寻找它们。

于 2008-10-10T13:27:40.180 回答
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。您可以自己手动尝试,看看它不会触发自动凸凹。

于 2010-02-24T04:44:34.987 回答
10

这个问题可以通过将以下内容放入您的 _vimrc 文件中来解决。

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

更多信息...

于 2008-10-10T13:20:15.950 回答
7

我认为“smartindent”是为 C 设计的,所以它认为“#”是预处理器指令的开始而不是注释。我不知道它的解决方案,除非你输入一个空格,然后是退格键,然后是“#”,它不会那样做。

于 2008-10-10T13:20:09.257 回答