在重新提交文件时,是否可以将vim和cindent配置为不改变c ++注释中的缩进(gg = G)?
我在评论中有一些格式化的列表与4个空格对齐,但是vim将其解释为坏缩进并重新排列所有内容。
例如:
/**
my list:
* item 1
* item 2
*/
变为:
/**
my list:
* item 1
* item 2
*/
我想要一种告诉vim的方法:“不要触摸评论内容,而是缩进其他内容。”
这一点非常重要,因为我们的项目使用doxygen和markdown之类的解析器生成文档,缩进由列表级别使用。
答案 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