我希望能够使用vim自动格式化以下规则的代码:
规则1):如果表达式必须用3个空格来表示。例如:
if(a &&
b)
(注意:b如果有相对于父级的三个空格缩进,请注意当前的vim行为为4)
规则2):由空格分隔的参数。例如:
function_call(a, b, c);
规则3):赋值运算符之间没有空格。例如:
int a=x;
规则4):引用/解除引用运算符附加到变量名称而不是类型。例如:
int& x = b;
如果可能,我希望vim在我输入时自动执行此操作,但是如果这不可能,识别与上述规则相反的格式(通过将其标记为错误)也会有所帮助。
答案 0 :(得分:2)
您可以在自定义缩进文件中设置自动缩进规则。查看“缩进”目录中的示例,例如/usr/share/vim/vim74/indent
或Vim source code distribution。
您可以在custom syntax file中设置错误突出显示规则。在“syntax”目录中找到示例,例如/usr/share/vim/vim74/syntax
,或者再次在Vim source code distribution中找到。以下是JSON文件的示例:
" Syntax: Decimals smaller than one should begin with 0 (so .1 should be 0.1).
syn match jsonNumError "\:\@<=[[:blank:]\r\n]*\zs\.\d\+"
如果您想在实际使用时自动重新格式化代码,则可能需要使用vim-autoformat等特殊插件和/或ClangFormat等外部工具。
答案 1 :(得分:0)
关于缩进等,请检查选项:h 'sw'
,:h 'cindent'
,:h 'cinoptions'
...
关于插入空格和换行符的位置,
对于已经输入的代码,clang-format确实是重新格式化代码的最佳方式。 vim有一个插件。
对于片段,括号等,我最近开发了一个插件,旨在格式化其他插件插入的文本。非常灵感,我将核心插件lh-style命名为。它由mu-template(我的代码段/模板插件)和lh-brackets使用。
对于其他你想要重新格式化的东西,它会更复杂一点。可能是lh风格可以帮助,我不知道,我还没有给出太多关于这个主题的信息。
例如,外部注释和字符串,=
应扩展为:
[
(lamdbas)之后,<BS>=<space>
,=
之后,>
,<
,!
后跟空格<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 =~ "[=<>![ \t\n]$" ? ''
\ : ' '
let after = line[col-1] =~ "[ \t\n\\]]" ? '' : ' '
return before.a:char.after
endfunction
inoremap <buffer> <expr> = <sid>InsertExpr('=')
inoremap <buffer> <expr> < <sid>InsertExpr('<')
inoremap <buffer> <expr> > <sid>InsertExpr('>')