Como posso definir a dobra de sintaxe do vim para o código-fonte do Informix 4GL?

0

Eu uso o vim para editar o código fonte do Informix 4GL que tem esse tipo de sintaxe:

FUNCTION
  FOR ...
  ...
  END FOR
END FUNCTION

Eu desejo dobrar as funções usando za zM etc

Isso funciona

  :set foldmarker=FUNCTION,END\ FUNCTION
  :set foldmethod=marker

No entanto, as palavras-chave também podem estar em letras minúsculas e eu também gostaria de dobrar MAIN..END MAIN, para que os marcadores não consigam fazer isso.

Eu tentei

:syn region myFun start="FUNCTION" end="END FUNCTION" transparent fold
:set foldmethod=syntax

mas não teve efeito. Eu já tenho um arquivo de sintaxe que realça a cor e :syn mostrou myFun incluído nas definições de sintaxe.

Como eu posso configurar o folding de sintaxe independente de case de FUNCTION ... END FUNCTION e MAIN..END MAIN?

Atualização: tentei o link , mas ele tem alguns problemas:

  • Dobre com um nível de detalhe que não quero ( IF , FOR , WHILE , ...)
  • Ele pressupõe que END instruções iniciam em uma nova linha (assim, IF a<b call c() END IF é dobrado para EOF)
  • Ele acha que SELECT * FROM table \n FOR UPDATE é o começo de uma instrução FOR

Então, eu gostaria de tentar criar algo muito mais simples primeiro.

    
por RedGrittyBrick 17.08.2011 / 18:53

1 resposta

1

Acho que você deve definir sua própria função de dobra, assim você terá mais controle sobre o que é dobrado quando. A seguinte função de dobra function / end function insensível, e deve ser bastante fácil de ajustar para outros requisitos:

function! InformixFold()
  let line      = getline(v:lnum)
  let prev_line = getline(v:lnum-1)

  if match(line, '^\s*function\s*$') >= 0
    return 1
  elseif match(prev_line, '^\s*end\s*function\s*$') >= 0
    return 0
  else
    return "="
endfunction

Em seguida, defina foldmethod para expr e foldexpr para a função:

set foldmethod=expr
set foldexpr=InformixFold()

Veja help fold-expr para mais.

"Screenshot":

- FUNCTION
|   FOR ...
|   ...
|   END FOR
| END FUNCTION

+ +--  5 lines: FUNCTION------------------------------------------------------
    
por 26.02.2013 / 10:36