vim,自动格式,代码二氧化碳,C

VIM, Automatic formatting, Code-Guidelines, C++

本文关键字:二氧化碳 代码 vim 格式      更新时间:2023-10-16

我希望能够使用vim自动格式化以下规则:

规则1(:如果必须用3个空间放置表达式。示例:

if(a &&
   b) 

(注意:b相对于父级具有三个空间内置,请注意当前的VIM行为为4(

规则2(:由空间隔开的参数。示例:

 function_call(a, b, c);

规则3(:分配运算符之间没有空间。示例:

int a=x;

规则4(:参考/解除运算符连接到可变名称而不是类型。示例:

int& x = b;

在可能的情况下,我希望VIM在我键入时自动执行此操作,但是如果不可能,请识别与上述规则相反的格式(通过将其标记为错误(也将有所帮助。

>

您可以在自定义凹痕文件中设置自动定义规则。在"缩进"目录中查看示例,例如/usr/share/vim/vim74/indent或VIM源代码分发。

您可以在自定义语法文件中设置错误突出显示规则。在"语法"目录中查找示例,例如/usr/share/vim/vim74/syntax之类的地方,或在VIM源代码分发中再次找到示例。这是JSON文件的示例:

" Syntax: Decimals smaller than one should begin with 0 (so .1 should be 0.1).
syn match   jsonNumError  ":@<=[[:blank:]rn]*zs.d+"

如果您想在走时自动重新格式代码,则可能需要一个特殊的插件,例如vim-autoformat和/或诸如clangformat之类的外部工具。

关于缩进,依此类推,请检查选项:h 'sw':h 'cindent':h 'cinoptions' ...

关于插入空间和新线的位置,

  • 对于已经键入的代码,clang-format确实是使用重构代码的最佳方法。有一个用于vim的插件。

  • 对于摘要,支架等,最近我已经在插件上工作,旨在格式化其他插件插入的文本。灵感的灵感,我被评为核心插件LH风格。它由MU-Template(我的摘要/模板插件(和LH-brackets使用。

  • 对于您要飞行的其他东西,它会更加复杂。我不知道LH风格可能会有所帮助,但我还没有给出太多主题。

    例如,外部注释和字符串,=应扩展到:

    1. [(LAMDBAS(之后本身,
    2. <BS>=<space>=之后,><!,然后是空间
    3. <space>=<space>否则

    编辑:我弄错了,它完全相反。

    这将是:

    " ftplugin/c/mymappings.vim
    function! s:InsertExpr(char) abort
      let col  = col('.')
      let line = getline('.')
      let syn = synIDattr(synID(line('.'),col-1,1),'name')
      if syn =~? 'comment|string|character|doxygen'
        return a:key
      endif
      let lcut = getline('.')[: col-2]
      let before =
               lcut =~ '[=<>!] $'       ? "<bs>"
             : lcut =~ "[=<>![ tn]$"  ? ''
             :                            ' '
      let after = line[col-1] =~ "[ tn\]]" ? '' : ' '
      return before.a:char.after
    endfunction
    inoremap <buffer> <expr> = <sid>InsertExpr('=')
    inoremap <buffer> <expr> < <sid>InsertExpr('<')
    inoremap <buffer> <expr> > <sid>InsertExpr('>')