2010-12-18 14 views
33

Wie bekomme ich vim den Cursor in die Klammern setzen, beginnend mit einer neuen Zeile, zB mit | bezeichnet die Cursorposition:Vim Auto Einrückung mit Zeilenumbruch

class { 
    | 
} 

jetzt mit meinen Einstellungen dies tut es nur

class { 
|} 

Ich habe dies in meiner .vimrc Datei set autoindent Einrückungstiefe = 2 tabstop = 2 noexpandtab

Grundsätzlich möchte ich nur, wie eine normale IDE es einrücken würde.

Update:

Ich fand, wie dies zu tun mit inoremap { {<CR>}<Esc>O

Antwort

9

Diesen in Ihrem .vimrc:

imap <C-Return> <CR><CR><C-o>k<Tab> 

Unter der Annahme, autoindent und smartindent richtig eingestellt sind, tippen Ctrl + Return zwischen Klammern werden Sie den Cursor setzen, wo Sie es haben wollen.

+0

Danke !! das funktioniert: P – Zen

+0

gibt es sowieso um es zuzuordnen, nur um tho einzugeben? Ich bin irgendwie daran gewöhnt, nur die Taste zu drücken, da ich die ganze Zeit mit der Eclipse gearbeitet habe. – Zen

+0

oder gibt es das trotzdem, um dies in eine Einrückungsdatei für eine bestimmte Sprache zu integrieren? – Zen

10

autoindent bezieht sich auf ihn über den aktuellen Einrückungsebene auf nachfolgende Linien. Um es entsprechend der Syntax einzurücken, müssen Sie auch ein Flag wie smartindent oder cindent angeben.

+0

die Vertiefung ist nicht ein prob, ich möchte nur eine newline automatisch eingefügt, wenn ich mit der richtigen einrückung eingeben Enter – Zen

+0

Ich bin verwirrt. Befinden Sie sich außerhalb des Einfügemodus?Wenn Sie 'i' und dann' Return' drücken, erhalten Sie das gewünschte Verhalten? –

+0

Ja, ich bin im Einfügemodus, was ich will ist, wenn ich Enter nach {ich will vim, um mich auf eine neue Zeile innerhalb der Schließung setzen}, im Grunde der erste Block in meiner Frage. – Zen

21

Ich fand, dass delimitMate genau das tut, was Sie beschreiben und mehr (das heißt, die Endung } automatisch einfügen). Beachten Sie, dass Sie delimitMate mitteilen müssen, um die Wagenrücklaufmeldungen zu erweitern, indem Sie let delimitMate_expand_cr=1 zu Ihrer Konfiguration hinzufügen.

Aus meiner Beobachtung ist dies genau das Verhalten in TextMate und SublimeText gefunden.

+0

FYI für Benutzer von delimitMate + neocomplcache: Wenn Sie das Standard-Setup von neocomplcache .vimrc verwenden, müssen Sie die Zuordnung anpassen, um beide Plugins zu berücksichtigen. Weitere Informationen [hier] (https://github.com/Raimondi/delimitMate/issues/111). Mein .vimrc hat jetzt 'imap pumvisible()? neocomplcache # smart_close_popup(): ' delimitMateCR'' und beide Plugins funktionieren wie ich sie will – bknoles

+4

Für 'delimitMate'' expand_cr_1' hat in letzter Zeit nicht funktioniert. Stattdessen können Sie 'imap pumvisible() verwenden? "\ ": " delimitMateCR" '. –

17

Ich habe Ubuntu 12.04 und ich fand keine Datei im Home-Verzeichnis. Global Datei war in /etc/vim/vimrc.
Es war fast nichts in dieser Datei. Also für mich funktionierte es diese 3 Zeilen am Ende der /etc/vim/vimrc

set autoindent 
set cindent 
inoremap { {<CR>}<up><end><CR> 

hinzufügen Wenn Sie { nächste Mal geben wird es durch Kombination {, Enter, }, oben, Ende geändert werden, Enter. cindent und autoindent wird die erforderliche Anzahl von Tabs hinzufügen.
P.S. Ich bin nicht gut darin, vim so zu stimmen, dass einige Erklärungen vielleicht nicht so genau sind. So funktioniert es meiner Meinung nach.

+0

Ich habe am Ende der letzten Zeile einen "" hinzugefügt, um die mittlere Zeile um einen Schritt einzudrücken. I.e. Inoremap {{} Skurpi

0

Am Ende der Datei, ich verwende:

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

Zum Beispiel Dockerfile:

FROM centos-7 
RUN ... 
CMD ... 

# vim: ts=2 sw=2 sts=2 sr noet st ai si 

Wenn Sie den Einzug nur halten möchten, verwenden Sie # vim: st ai si

Verwandte Themen