chi*_*ode 6 vim sass indentation auto-indent
我使用https://github.com/cakebaker/scss-syntax.vim在vim上突出显示SCSS(或SASS)文件的语法,这非常适用于语法高亮.但是,该插件没有附加缩进文件,并且在编写插件时遇到问题.
我想将缩进设置为如下所示:
但是,如果我这样做gg=G
,我得到:
我怀疑它不理解基于大括号的嵌套缩进.我尝试了所有不同的组合
set cindent
set nocindent
set autoindent
set smartindent
并试图使用Tab键== 4空格中的代码和Vim中的花括号后自动缩进,包括
set tabstop=2
set shiftwidth=2
set expandtab
...但嵌套大括号缩进似乎永远不会起作用.
我相信我可能想写一个自定义缩进文件,我需要的是基于嵌套级别的大括号的缩进.我该怎么办呢?如果某人有一个具有类似语法的文件类型的缩进文件,那么这也是很好的.
DrA*_*rAl 10
这是一个快速入侵,基于内置的perl缩进代码(in indent/perl.vim
).希望您可以使用它来获得您想要做的事情.有关更多详细信息,请参阅perl缩进代码中的更详细注释或indent目录中的另一个文件.
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
Run Code Online (Sandbox Code Playgroud)
保存该文件作为~/.vim/indent/something.vim
哪里something
是你的文件类型(替换~/.vim
用的路径vimfiles
,如果你使用的是Windows.
您可能还想在文件的开头加上这个(但是只有在没有可能首先加载的其他缩进声明时):
" Only load this indent file when no other was loaded.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2573 次 |
最近记录: |