2009-03-06 7 views
62

Non riesco a ottenere il rientro in linea di Javascript correttamente in Vim. Si consideri il seguente:Come posso correggere il rientro JavaScript inline non corretto in Vim?

$(document).ready(function() { 

    // Closing brace correctly indented 
    $("input").focus(function() { 
     $(this).closest("li").addClass("cur-focus"); 
    }); // <-- I had to manually unindent this 

    // Closing brace incorrectly indented 
    $("input").blur(function() { 
     $(this).closest("li").removeClass("cur-focus"); 
     }); // <-- This is what it does by default. Argh! 

    }); 

Vim sembra insistere sul rientro automaticamente la parentesi di chiusura mostrato nel secondo caso c'è. Fa lo stesso se rientro l'intero file. Come faccio a indentarlo automaticamente usando lo stile di indentazione JS più standard visto nel primo caso?

risposta

80

Usa JavaScript Indent: Javascript indenter (HTML indent is included) da Preston Koprivica. Grazie per l'heads-up da oligofren - dagli un voto positivo.

+0

Stavo solo suggerendo nel commento alla tua risposta che forse il file di sintassi vim potrebbe mancare :) – m42

+0

Mi sono chiesto perché il rientro di JavaScript sia tutto storto, grazie mille! – FurtiveFelon

+0

I jave problemi di indentazione con il rientro javascript OOP fornito, in particolare con jQuery-code. Vedi la risposta di oligofren per un plugin di indentazione funzionante. – Markus

5

forse una combinazione di queste impostazioni dovrebbe essere nel file VIMRC.

syntax on 
set syn=auto 
set showmatch 
filetype on 
filetype plugin on 
filetype indent on 
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set expandtab 
+0

Grazie mille per i suggerimenti, ma ho già ottenuto la maggior parte di questi set e non sembrano aiutare. –

+0

Mi accorgo che a volte le parentesi graffe corrispondenti spostano un punto di tabulazione finché non si ignora quella riga nel codice. Pensavo * che "il plug-in di tipo file su & il rientro del tipo di file" avrebbe dovuto guidarlo. hai un file di sintassi per javascript? (Non sto lavorando con JS, quindi non so se è necessario o no – m42

+0

Senza alcune di queste impostazioni, lo script Koprivica non funzionerà –

0

Supponendo che il file di sintassi abbia un buon rientro per lo script java, evidenzia visivamente il blocco e premi =. Questo funziona per java, quindi mi aspetto che faccia qualcosa di decente per lo script java. I risultati probabilmente dipendono anche dalle impostazioni di tabstop, expandtab e forse shiftwidth.

gq è anch'esso utile, formatta le righe piuttosto che le indentazioni.

+0

Grazie per quello. La combo che di solito uso per far rientrare un intero file è gg = G. Il mio problema era che quando ho fatto questo, JS non ha indentato correttamente. La mia risposta sopra ha risolto il problema. –

3

Ho avuto lo stesso problema. Questo è il migliore di tutti gli script di rientro Javascript:

http://www.vim.org/scripts/script.php?script_id=1840

Si richiede il plugin IndentAnything

http://www.vim.org/scripts/script.php?script_id=1839

Come bonus aggiuntivo, ho scritto questo script trattino che renderà blocchi Javascript piuttosto bella . Esso utilizza il penetratore di default HTML di default (e IndentAnything uno quando all'interno di un blocco di JavaScript)

http://gist.github.com/371902

+0

sembra che questo faccia la maggior parte delle cose "sbagliate", come l'aggiunta di due livelli di indent after (function() {. Inoltre perde punti estremi per non avere un repository github/bibucket. –

+0

Accetto mentre è meglio della maggior parte della risposta a monte ancora non è buona – Drachenfels

84

Lo script più completo e privo di bug indentazione Javascript è the one by Preston Koprivica. Il cosiddetto script OOP presente nella risposta proposta ha bug gravi e non rientra correttamente nel codice che ha parentesi quadre.

+3

Questo è l'unico che funziona davvero per i miei file js (costituito principalmente da codice jQuery - più parentesi graffe e parentesi graffe spesso sulla stessa riga) – Markus

+1

Nota, ho aggiornato la risposta accettata qualche tempo fa per collegarmi allo script di Preston Koprivica Grazie a oligofren per il puntatore –

+1

Nota: Qualcosa nella mia configurazione di vim fa sì che la versione '1.0' dello script di Preston non indentizzi correttamente su nuove righe. La versione' b3.0' funziona comunque bene, se hai problemi con '1.0', prova invece' b3.0 ' –

17

Gli script di cui sopra non formattare la chiusura sintassi spesso usato in jQuery correttamente:

$(function() { 
    // only one level of indentation, not two 
}); 

Questo script funziona meglio per me: http://www.vim.org/scripts/script.php?script_id=2765

+5

Grazie per questo! Come nota a margine, assicurati di ottenere la versione da github, che è molto, molto più recente. – DMan

+2

Questo funziona molto meglio di quello votato più alto per me. Grazie. –

+0

Purtroppo questo script di rientro fallisce in casi semplici come mettere la parentesi di apertura di un blocco su una nuova riga e non rispetta le impostazioni di espansione della scheda utente, ad esempio il rientro con 3 spazi quando è configurato per espandersi a 4. – aphax

10

La maggior parte di queste risposte sono a partire dal 2009 e, francamente, non sono aggiornati.

vim-javascript è molto più recente e up-to-date di Preston's script.

L'installazione è un po 'più complicato se non hai iniziato a utilizzare Vundle ancora, ma non sembra soffrire di problemi del alternative.

+0

Si noti che 'vim-javascript' non supporta javascript incorporato nei file html (per quanto posso dire). –

+0

Questo è il miglior plugin per javascript che ho trovato. Ancora buono nel 2017 –

1

Nel caso qualcuno venga qui, si prega di notare che lo vim-javascript per pangloss allo https://github.com/pangloss/vim-javascript mi ha aiutato fino ad ora, ad esempio Vim 7.4. E le soluzioni di cui sopra da oligofren e Charles Roper no.

Problemi correlati