2010-03-03 9 views
12

Sto usando js2-mode per lavorare con javascript in emacs e per la maggior parte è molto utile. Tuttavia, i metodi come indentare sono terribilmente frustrante quando si lavora con jQuery, chiusure, e JSON ... per esempio, il codice che voglio essere rientrato in questo modo:Emacs + js2-mode: disabilita completamente il rientro?

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

venuto fuori come:

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

Esiste un modo per disattivare tutti gli "helper" di indentazione e inserire semplicemente gli spazi N quando tocchi il tasto Tab? So che l'indentazione manuale è un passo indietro, ma il codice leggibile è, IMHO, più utile di uno strumento che non funziona come previsto.

+0

Questo era un problema per la vecchia modalità js2. Il problema è ora risolto con l'ultima versione GNU ELPA di js2-mode che può essere installata da 'M-x list-packages'. Con quella versione, C-M- \ o TAB su una regione dovrebbero indentare le linee in un modo convenzionale che ci si aspetta e non in modo simile a Lisp. –

risposta

5

Credo che farò questa una risposta completa al posto di un commento; espresso-mode è incluso in Emacs ed è progettato per essere una modalità Javascript per Emacs (invece di una modalità Javascript che accade all'interno di Emacs). Funziona come le normali modalità di programmazione, e capita anche di far rientrare le cose nel modo che preferisci.

+0

Sto usando emacs 22, ma recentemente ho aggiunto la modalità espresso e l'ho trovato * molto * migliore del valore predefinito. Grazie! –

+2

Non penso valga la pena buttare via tutte le caratteristiche della modalità js2 quando puoi usare il link @AntonJ fornito (http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode) per ottenere il meglio da entrambi i mondi. L'ho usato e non ho rimpianti di sorta. –

1

Si può semplicemente legare TAB per inserirsi:

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

(Ma la soluzione migliore sarebbe, naturalmente, è quello di scoprire perché il modo pensa che ha tanto bisogno di rientro per le funzioni anonime, e fissarlo .)

2

js2-mode supporta il rientro "rimbalzo"; è possibile premere TAB più volte per scegliere diversi livelli probabili rientri, per cui si potrebbe essere in grado di ottenere l'effetto che si desidera in questo modo:

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

Già provato, ma l'algoritmo che utilizza non ottiene mai il rientro corretto. Grazie comunque! –

4

di verificare questa soluzione, mappe funzione rientro in js2 modalità utilizzare per parziale rientro da esresso-mode (ora conosciuto come JS-mode incluso nel emacs 23.2 e successivi):

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

funziona esattamente come mi aspetto rientro in emacs al lavoro e si ottiene ancora la suggestione di analisi da js2-mode.

6

Non è una risposta diretta alla tua domanda, ma here is a fork di js2-mode che ha migliorato il rientro.

Uno dei miglioramenti è che il codice di esempio è rientrato nel modo in cui lo chiedi qui.

+0

Ora molti miglioramenti della forcella sono stati importati nella modalità js2 originale e anche la versione ELPA ha tutti questi miglioramenti. –

+0

Per essere più precisi, "fork" ed ELPA hanno la stessa versione e la pagina ufficiale è in ritardo. – Dmitry

1

Un'altra alternativa è js3-mode. In questo modo, per impostazione predefinita, i trattini rientrano in questo modo, ma sembrano esserci alcune opzioni che potrebbero consentire di modificarlo a tuo piacimento.

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