How do I define indents in vim based on curly braces?
我使用https://github.com/cakebaker/scss-syntax.vim在vim上突出显示SCSS(或SASS)文件的语法,这非常适用于语法高亮。但是,该插件没有附加缩进文件,并且在编写插件时遇到问题。
我想将缩进设置为如下所示:
但是,如果我做
我怀疑它不理解基于大括号的嵌套缩进。我尝试了所有不同的组合
并试图使用Tab键== 4空格中的代码和Vim中的花括号后自动缩进,包括
<5233>
...但嵌套大括号缩进似乎永远不会起作用。
我相信我可能想写一个自定义缩进文件,我需要的是基于嵌套级别的大括号??的缩进。我该怎么办呢?如果某人有一个具有类似语法的文件类型的缩进文件,那么这也是很好的。
这是一个快速入侵,基于内置的perl缩进代码(在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | setlocal indentexpr=GetMyIndent() function! GetMyIndent() let cline = getline(v:lnum) " Find a non-blank line above the current line. let lnum = prevnonblank(v:lnum - 1) " Hit the start of the file, use zero indent. if lnum == 0 return 0 endif let line = getline(lnum) let ind = indent(lnum) " Indent blocks enclosed by {}, (), or [] " Find a real opening brace let bracepos = match(line, '[(){}\[\]]', matchend(line, '^\s*[)}\]]')) while bracepos != -1 let brace = strpart(line, bracepos, 1) if brace == '(' || brace == '{' || brace == '[' let ind = ind + &sw else let ind = ind - &sw endif let bracepos = match(line, '[(){}\[\]]', bracepos + 1) endwhile let bracepos = matchend(cline, '^\s*[)}\]]') if bracepos != -1 let ind = ind - &sw endif return ind endfunction |
将该文件另存为
您可能还想在文件的开头加上这个(但是只有在没有可能首先加载的其他缩进声明时):
1 2 3 4 5 | " Only load this indent file when no other was loaded. if exists("b:did_indent") finish endif let b:did_indent = 1 |