2015-07-08 12 views
6

Ich versuche Vim für einige Groovy-Code bei der Arbeit zu verwenden. Es scheint nicht gut mit Autoindents umzugehen, wenn Semikolons nicht verwendet werden. Ich habe ein paar Fragen zu Ruby und JavaScript mit den gleichen Problemen gefunden, aber keine der Fixes, die ich finde, funktionieren für mich. Ich habe filetype plugin indent on in meinem .vimrc und nicht cindent, autoindent oder smartindent. Ich habe versucht, setlocal nocindent nosmartindent in einem Groovy-Puffer laufen und Reindending die Datei mit ggVG= nur für den Fall, dass es ein Plugin-Einstellung diese hinter den Kulissen, und es immer noch immer falsch macht.Kann ich Groovy-Einzug in Vim beheben?

Zum Beispiel habe ich bekommen diese auf einer kleinen Probe (aus einer persönlichen Libgdx Sandbox-app, die ich in Groovy zu schreiben bin)

@Override 
    void render() { 
     Gdx.gl.glClearColor(0.75f, 0.75f, 0.75f, 1) 
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT) 
      batch.begin() 
      batch.draw(img, 0, 0) 
      font.draw(batch, "Testing", 300, 400) 
      batch.end() 
    } 

Beachten Sie die zusätzlichen Einschnitte nach der Anmerkung, die öffnende Klammer und dem ersten Linie der Funktion. Mein .vimrc ist ziemlich komplex, aber ich kann einen Link zu meinen dotfiles veröffentlichen, wenn jemand denkt, dass das hilft.

+0

Höchstwahrscheinlich müssen Sie nur vim aktualisieren. Welche Version von vim laufen Sie? – FDinoff

+0

Vim 7.3.547 auf Raspbian (auf meinem Raspberry Pi), 7.4.591 auf Cygwin (selbst kompiliert), 7.3 mit unbekannter Patch-Ebene auf OS X Yosemite und MacVim 7.4.712 zeigen alle das gleiche Problem. – DuckPuppy

+0

Ich habe das auch getestet, indem ich 'vim -u NONE -U NONE ' auf jeder dieser Versionen ausgeführt habe und das gleiche Verhalten sehen kann, also bin ich mir ziemlich sicher, dass es kein Plugin oder eine meiner .vimrc-Einstellungen ist . – DuckPuppy

Antwort

6

Vim kommt nicht mit einem Einzugsskript für groovy. Es versucht also, die auf C basierenden Standard-Einrückungsregeln zu verwenden. Diese Regeln verwenden ein Semikolon, um zu bestimmen, ob eine Zeile beendet ist, weshalb Sie Zeilenfortsetzungseinzüge in der zweiten Zeile der Funktion erhalten.

Da vim das Einzugs-Skript nicht enthält, können Sie das groovyindent-Plugin verwenden. Platziert in ~/.vim/indent. Sie müssen auch dos2unix auf groovy.vim ausführen, da es die falschen Zeilenenden enthält.

+0

Das war es, und ich fühle mich jetzt ein bisschen albern, dass ich das früher nicht gefunden habe. Ich benutze NeoBundle, um meine Vim-Plugins zu verwalten. Jeder, der dasselbe für das groovyindent-Plugin tun möchte, kann dieses Snippet verwenden, um es zu installieren ... das wird dafür sorgen, dass während der Installation dos2unix auf der Datei ausgeführt wird: https://gist.github.com/duckpuppy/cf5931c7abbf5389f7b9 – DuckPuppy

+4

Dort ist jetzt eine Unix-Version von groovyindent: https://github.com/vim-scripts/groovyindent-unix – cmcginty