2010-03-03 19 views
12

Estoy usando js2-mode para trabajar con javascript en emacs y en su mayor parte es muy útil. Sin embargo, los métodos de sangría son terriblemente frustrante cuando se trabaja con jQuery, cierres, y JSON ... por ejemplo, el código que Deseo ser una sangría como esto:Emacs + js2-mode: deshabilitar la sangría por completo?

var foo = jQuery('#mycontainer ul li').each(function(el){ 
    var bar = el.html(); 
}); 

Resulta como:

var foo = jQuery('#mycontainer ul li').each(function(el){ 
              var bar = el.html(); 
             }); 

¿Hay alguna manera de desactivar todas las sangrías "helpers" y simplemente tener emacs insertar N espacios cuando presiono la tecla tab? Sé que la indentación manual es un paso atrás, pero tener un código legible es, en mi humilde opinión, más útil que una herramienta que no funciona como se esperaba.

+0

Eso solía ser un problema para el antiguo js2-mode. El problema ahora se ha ido con la última versión de GNU ELPA de js2-mode que se puede instalar desde 'M-x list-packages'. Con esa versión, C-M- \ o TAB en una región debe aplicar sangría a las líneas de una manera convencional que esperas y no a la manera de Lisp. –

Respuesta

5

Creo que voy a hacer de esto una respuesta completa en lugar de un comentario; espresso-mode se incluye con Emacs, y está diseñado para ser un modo Javascript para Emacs (en lugar de un modo Javascript que se ejecuta dentro de Emacs). Funciona como los modos de programación regulares, y también para sangrar las cosas de la manera que desee.

+0

Estoy usando emacs 22, pero recientemente agregué el modo expreso y lo encontré * mucho * mejor que el predeterminado. ¡Gracias! –

+2

No creo que valga la pena descartar todas las características agradables del modo js2 cuando se puede usar el enlace @AntonJ proporcionado (http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode) para obtener lo mejor de ambos mundos. He estado usando eso y no me arrepiento de nada. –

1

Usted puede simplemente enlazar TAB para insertarse:

(add-hook 'js2-mode-hook 'my-js2-mode-hook) 
(defun my-js2-mode-hook() 
    (define-key js2-mode-map [tab] 'self-insert-command)) 

(Sin embargo, la mejor solución sería, por supuesto, para averiguar por qué el modo piensa que necesita tanta sangría para funciones anónimas, y fijarlo .)

2

js2-mode admite sangría de "rebote"; puede pulsar la pestaña varias veces para seleccionar diferentes niveles de sangría probable, por lo que podría ser capaz de obtener el efecto deseado de esa manera:

(setq js2-bounce-indent-p t) 
+0

Ya lo intenté, pero el algoritmo que utiliza nunca obtiene la sangría correcta. ¡Gracias! –

4

Salida esta solución, los mapas de función de sangrado en el modo js2 a utilizar parcialmente sangría desde esresso-modo (ahora conocido como JS-régimen incluido en Emacs 23.2 y posteriores):

http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode

funciona exactamente como espero hendidura en emacs para trabajar y todavía consigo la maravilla de análisis de modo js2.

6

No es una respuesta directa a su pregunta, pero here is a fork de js2-mode que ha mejorado la indentación.

Una de las mejoras es que su código de ejemplo está sangrado de la manera en que lo hace aquí.

+0

Ahora se han importado muchas mejoras de la horquilla al modo js2 original y la versión ELPA también tiene todas esas mejoras. –

+0

Para ser más precisos, el "tenedor" y ELPA tienen la misma versión, y la página oficial se está quedando atrás. – Dmitry

1

Otra alternativa es js3-mode. Sangra así por defecto, pero parece que hay algunas opciones que pueden permitirle ajustarlo para su gusto.

var foo = jQuery('#mycontainer ul li').each(function(el){ 
      var bar = el.html(); 
      }); 
Cuestiones relacionadas