Pregunta

Tengo un archivo de script bash que comienza con una definición de función, como esta:

#!/bin/bash
# .....
# .....
function test {
...
...
}
...
...

Uso vim 7.2, y he establecido g: sh_fold_enabled = 1 de modo que el plegado esté habilitado con bash. El problema es que el plegamiento de la prueba de función no finaliza correctamente, es decir, dura hasta el final del archivo. Se ve algo como esto:

#!/bin/bash
# .....
# .....
+-- 550 lines: function test {----------------------------------------
~
~

La función en sí es de aproximadamente 40 líneas, y quiero algo que se vea así (" imágenes " dicen más que mil palabras, dicen ...):

#!/bin/bash
# .....
# .....
+-- 40 lines: function test {----------------------------------------
...
...
...
~
~

¿Alguien sabe una buena solución a este problema?

¿Fue útil?

Solución

He investigado un poco y he encontrado una manera de solucionar el problema: para evitar que vim ejecute las funciones de plegado hasta el final del archivo, tuve que agregar una declaración de omisión a la región de sintaxis para shExpr (en el archivo sh.vim , generalmente ubicado en algún lugar como / usr / share / vim / vim70 / syntax / ):

syn region shExpr ... start="{" skip="^function.*\_s\={" end="}" ...

Este cambio impide que el archivo de sintaxis piense que { y } pertenecen al grupo shExpr, cuando en realidad pertenecen al grupo de funciones. O así es como lo he entendido, de todos modos.

Nota: esta solución solo funciona con la siguiente sintaxis:

function test
{
....
}

y no por esto:

function test {
....
}

Una solución rápida y sucia para el último error es eliminar shExpr del clúster @shFunctionList.

Otros consejos

Debería funcionar, pero parece que hay un error en el archivo de sintaxis. La región de plegado en realidad comienza en la palabra 'función' y trata de continuar hasta el cierre '}', pero el resaltado para la región '{...}' toma el cierre de '}' y el pliegue continúa en la búsqueda de otra uno. Si agrega otro '}', puede ver esto en acción:

function test {
    ...
}
}

Parece que hay una solución más simple en Reddit . / p>

Para citar al autor en la publicación:

  

Las opciones que uso son:

syntax=enable

filetype=sh

foldmethod=syntax

let g:sh_fold_enabled=3

g:is_sh=1
     

EDITAR: Solución

     

vim -u NINGUNO -c 'deja g: sh_fold_enabled = 7' -c ': establece fdm = sintaxis' -c 'sy   en 'file.sh

g: sh_fold_enabled = 4 parecía ser el nivel de plegado acordado en la discusión. Esta solución está funcionando perfectamente para mí. No tuve que editar el archivo de sintaxis.

Edit: g: sh_fold_enabled = 5 es en realidad el correcto. No 4. Además, como mostró el póster en Reddit, esos comandos deben ir antes que cualquier otra configuración en vimrc, excepto los complementos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top