2009-10-30 13 views
17

tengo este pedazo de JavaScript ...¿Cómo puedo formatear el código JS en Vim?

15 $('.ajax_edit_address').each(function() { 
16  $(this).ajaxForm({ 
17  target: $(this).parents('table.address').find('tr.address_header').children(':first'), 
18  success: function(response) { 
19   $('input, select, textarea', '.ajax_edit_address').removeClass('updating'); 
20  } 
21  }); 
22 }); 

Eso es formatea la manera que me gusta. Pero digamos que acababa de escribir algo y quería arreglarlo. Así que corro el código formateador Vim en él ...

=7j 

El resultado es ...

15 $('.ajax_edit_address').each(function() { 
16  $(this).ajaxForm({ 
17 target: $(this).parents('table.address').find('tr.address_header').children(':first'), 
18 success: function(response) { 
19 $('input, select, textarea', '.ajax_edit_address').removeClass('updating'); 
20 }  
21 }); 
22  }); 

Vim parece tener problemas con funciones como argumentos del método.

Esto es lo que creo que es la parte pertinente de mi .vimrc ...

:set cindent shiftwidth=2 

" indent depends on filetype 
:filetype indent on 

:filetype plugin on 

¿Hay alguna otra cosa que necesita ser instalado o configurado para formatear código JS?

+0

Ese script es un poco extraño ... girará: var x = 1 + 2 + 3 + 4 + 5 + 6 + 7; en var x = 1 + 2 + 3 + 4 + 5 + 6 + 7; También hay otros casos extraños, así que no lo ejecutes en un archivo completo ... – gravitation

Respuesta

2

El mayor problema parece ser que el cindent no reconoce este tipo de sintaxis:

 
test({ 
    var b = 2; 
}); 
Lo convertirá en esto:
 
test({ 
    var b = 2; 
    }); 

Si manejas esa caja, me imagino que la sangría no sería tan mala para la sintaxis de jquery. Pero esto requeriría que escribieras un archivo personalizado de sangría de JavaScript. Además, tendría que editar el archivo de sangría html para no usar Cindent para etiquetas de guiones con contenido de JavaScript.

No creo que nadie haya creado con éxito un archivo de sangría compatible con jquery/prototype para javascript. Las secuencias de comandos de guiones de Javascript existentes son defectuosas.

+0

Lo curioso es que el script jamessan linked parece manejar este caso correctamente, pero para el código aún más fácil (arriba) lo arruina todo ... – gravitation

+2

Estoy tan confundido por esta respuesta. Por supuesto, un embellecedor de JS hará cosas raras con una sintaxis inválida ... – tbranyen

1

Desafortunadamente, 'cindent' simplemente no va a hacer el trabajo ya que está muy ligado a la sintaxis C. Como todo el script de sangría predeterminado para javascript lo hace, se activa 'cindent', eso no es de mucha ayuda. ¡Incluso lo dice en el guion!

"Mantenedor:? Ninguno ¿Quieres mejorar esta

no hago que no sea muy básico Javascript nada por lo que nunca he molestado tratando de encontrar algo mejor De un vistazo rápido en vim. .org, this script parece que valdría la pena. Es más reciente, por lo que probablemente tenga en cuenta el javascript más complejo que se usa actualmente.

+0

Acabo de probarlo; no es perfecto, pero es mucho mejor que el script predeterminado. ¡Gracias! – gravitation

21

El complemento VIM Jsbeautify podría manejar jQuery correctamente. Es la versión del complemento vim del Jsbeautify en línea.

+0

Funciona muy bien para mí vim-jsbeautify https://github.com/maksimr/vim-jsbeautify – Eric

9

Hay una solución mucho más simple que no requiere complementos vim.

Instalar js-beautify a su pitón sistema:

pip install jsbeautifier 

A continuación, agregue esto a su.vimrc:

autocmd FileType javascript setlocal equalprg=js-beautify\ --stdin 

Eso es todo.

Ejecute :help equalprg para ver por qué esto funciona.

+0

Opciones que puede agregar a esa línea que pueden ser útiles: --indent-size = 3 --indent-char = CHAR (el espacio es predeterminado) --indent-with-tabs --space-in-paren Puede ver todos los comandos yendo a la línea de comando y escribiendo 'js- embellecer'. – kash

+0

¡Mejor! ¿Por qué usar 'equalprg' en lugar de' formatprg' aquí? –

Cuestiones relacionadas