2011-09-07 14 views
6

Estoy usando Vim para editar el código de Erlang. Estoy acostumbrado a (la mayoría de los programadores hacen esto Erlang) para sangrar código Erlang por el alcance del soporte que están en, por ejemplo, C es a menudo una sangría tamaño de la pestaña entre llaves:.Sangría código por índice de columna de soporte en Vim?

int main(void) { 
    printf("hello, world\n"); 
    return 0; 
} 

En Erlang, es común para sangrar sobre la base de la columna en la que comenzó el soporte:

?assertError({bad_options, [{foo, bar}, 
          bad_option]}, 
      lhttpc:request("http://localhost/", get, [], <<>>, 1000, 
          [bad_option, {foo, bar}])). 

(Ejemplo anterior se sangra para obtener el punto a través, no de acuerdo a la belleza subjetiva).

Ancho de la lengüeta se utilizaría si el bloque se inicia en una nueva línea:

?assertError(
    {bad_options, [{foo, bar}, bad_option]}, 
    lhttpc:request(
     "http://localhost/", get, [], <<>>, 1000, 
     [bad_option, {foo, bar}] 
    ) 
). 

partes relevantes de mi .vimrc:

set expandtab " Spaces for tabs " 
set tabstop=4 " Tab width 4 " 
set shiftwidth=4 
set smarttab 
set autoindent 

" Enable filetype plugin " 
filetype plugin on 
filetype indent on 

¿Hay una manera de realizar esta hendidura en Vim , y si es así, ¿cómo?

+0

¿Has probado https://github.com/jimenezrick/vimerl? – W55tKQbuRu28Q4xv

+0

Me di cuenta de que estoy usando 'vimerl' y actualicé a la última versión. Pero no, todavía tiene una sangría de 1 (o 2 veces, por extraño que parezca) ancho de pestañas. –

Respuesta

4

Hay un tenedor de vimerl que implementa "contexto muesca en cuenta" en lugar de "punzonamiento estático": https://github.com/aszlig/vimerl.git

parece funcionar, así que voy a rodar con eso por un tiempo.

+0

Hola, @Adam Lindberg. Ha sido una semana. ¿Cómo te sientes acerca de Vimerl? Tengo exactamente los mismos requisitos que usted. ¡Gracias! – JasonSmith

+0

Ese tenedor parece sangrar según mis necesidades. –

1

Esto parece que debes profundizar en el turbio mundo de cindent y cinoptions. Creo que poner lo siguiente en su vimrc cumplirá parcialmente sus necesidades:

set cindent 
set cinoptions+=(0 

pero la pregunta es cómo esto afectará a otros comportamientos. Consulte help cinoptions-values para obtener más información. Debería ser posible lograr exactamente lo que quieres, pero podría requerir algo de experimentación.

Espero que esto ayude.

+0

Parece algo prometedor, pero no puedo imaginarme qué opciones usar. Intenté muchas cosas pero no obtuve nada remotamente utilizable. Sospeche que tal vez el plugin Erlang también estropea las cosas, ya que tiene su propia sangría. –

+0

¿Ha intentado utilizar 'set cinoptions?' Para encontrar el valor establecido por los cambios de Erlang (sin ninguno de sus cambios)? ¿El plugin pretende mejorar el sangrado? Si es así, puede ser difícil ajustarlo desde fuera del complemento. –

+0

El 'cinoptions' predeterminado parece estar vacío. El complemento parece hacer algo de trabajo [de sangría manual] (https://github.com/jimenezrick/vimerl/blob/master/indent/erlang.vim), lo que puede dificultar la reparación. –

Cuestiones relacionadas