Eu uso shift >
em várias linhas selecionadas ou >>
em uma linha para recuar.
mas a distância do recuo é sempre 8 espaços, enquanto eu já defini shiftwidhth =4
" set python file indent type
au BufNewFile,BufRead *.py
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set autoindent
"""""""""for uml""""""""""""""""
au BufNewFile,BufRead *.uml
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set autoindent
quando se trata de arquivo python, ele funciona bem. mas quando é o arquivo .uml, esse problema ocorre.
Tenho certeza que não há nenhuma outra configuração no arquivo .vimrc sobre indent para uml arquivo, mas um plugin aklt/plantuml-syntax
e descubro que este plugin tem a configuração para o recuo do arquivo uml, o que provavelmente causa o meu problema. Então, como mudar o recuo definido pelo plugin?
esta é a seção do código-fonte desse plugin definindo o recuo
if exists('b:did_indent')
finish
endif
let b:did_indent = 1
setlocal indentexpr=GetPlantUMLIndent()
setlocal indentkeys=o,O,<CR>,<:>,!^F,0end,0else,}
" only define the indent code once
if exists('*GetPlantUMLIndent')
finish
endif
let s:incIndent =
\ '^\s*\%(loop\|alt\|opt\|group\|critical\|else\|legend\|box\|if\|while\)\>\|' .
\ '^\s*ref\>[^:]*$\|' .
\ '^\s*[hr]\?note\>\%(\%("[^"]*" \<as\>\)\@![^:]\)*$\|' .
\ '^\s*title\s*$\|' .
\ '^\s*skinparam\>.*{\s*$\|' .
\ '^\s*\%(state\|class\|partition\|rectangle\|enum\|interface\|namespace\|object\)\>.*{'
let s:decIndent = '^\s*\%(end\|else\|}\)'
function! GetPlantUMLIndent(...) abort
"for current line, use arg if given or v:lnum otherwise
let clnum = a:0 ? a:1 : v:lnum
if !s:insidePlantUMLTags(clnum)
return indent(clnum)
endif
let pnum = prevnonblank(clnum-1)
let pindent = indent(pnum)
let pline = getline(pnum)
let cline = getline(clnum)
if cline =~ s:decIndent
if pline =~ s:incIndent
return pindent
else
return pindent - shiftwidth()
endif
elseif pline =~ s:incIndent
return pindent + shiftwidth()
endif
return pindent
endfunction
function! s:insidePlantUMLTags(lnum) abort
call cursor(a:lnum, 1)
return search('@startuml', 'Wbn') && search('@enduml', 'Wn')
endfunction
pode haver algumas outras funções deste plugin, então eu não quero remover o plugin