在vim中保留C ++注释中的缩进

时间:2017-10-18 07:11:05

标签: c++ vim indentation

在重新提交文件时,是否可以将vim和cindent配置为不改变c ++注释中的缩进(gg = G)?

我在评论中有一些格式化的列表与4个空格对齐,但是vim将其解释为坏缩进并重新排列所有内容。

例如:

/**
    my list:
         * item 1
         * item 2
 */

变为:

/**
    my list:
    * item 1
    * item 2
*/

我想要一种告诉vim的方法:“不要触摸评论内容,而是缩进其他内容。”

这一点非常重要,因为我们的项目使用doxygen和markdown之类的解析器生成文档,缩进由列表级别使用。

2 个答案:

答案 0 :(得分:3)

如何写这样这样的评论缩进与评论缩进无关:

/**
*    my list:
*        * item 1
*        * item 2
*/

答案 1 :(得分:1)

根据审核建议,我在vi stackexchange community处回答了答案:

  

我不相信'cinoptions'可以实现这一目标。

     

正确的解决方案可能是编写一个新的indentexpr,它将C缩进(可通过cindent()函数访问)仅应用于评论中不包含的行。

     

然而,这里有几个快速而肮脏的解决方案:

我跳过了第一个我不会使用的解决方案,因此不是答案。你仍然可以在原帖上看到它。

  

使用函数

function! IndentIgnoringComments()
 let in_comment = 0
  for i in range(1, line('$'))
    if !in_comment
      " Check if this line starts a comment
      if getline(i) =~# '^\s*/\*\*'
        let in_comment = 1
      else
        " Indent line 'i'
        execute i . "normal =="
      endif
    else
      " Check if this line ends the comment
      if getline(i) =~# '\*\/\s*$'
        let in_comment = 0
      endif
    endif
  endfor
endfunction
     

您可以使用:call IndentIgnoringComments()运行此命令,也可以设置命令或映射。 e.g:

nnoremap <leader>= :call IndentIgnoringComments()<CR>

我个人定义了一个command,它调用此函数并将其与另一个重新格式化,我经常应用于此项目中的文件(:%s/\s*$//g)。

感谢Rich

上的https://vi.stackexchange.com

原帖:https://vi.stackexchange.com/a/13962/13084