2010-12-18 14 views
33

Jak uzyskać vim, aby umieścić kursor w nawiasie, zaczynając od nowej linii, tj. Z | oznaczający pozycję kursora:Vim Auto Indent with newline

class { 
    | 
} 

teraz z moich ustawieniach to tylko robi to

class { 
|} 

mam to w moim pliku .vimrc zestaw autoindent shiftwidth = 2 TabStop = 2 noexpandtab

Zasadniczo po prostu chcę, jak normalne IDE byłoby wcięcie go.

zmiana:

znalazłem jak to zrobić z inoremap { {<CR>}<Esc>O

Odpowiedz

9

umieścić to w swoim .vimrc:

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

Zakładając autoindent i smartindent są ustawione prawidłowo, wpisując Ctrl + Return między szelkami umieści kursor tam, gdzie chcesz być.

+0

Dzięki! to działa: P – Zen

+0

czy jest i tak, aby go zmapować, aby po prostu wprowadzić tho? W pewnym sensie przyzwyczaiłem się do naciśnięcia klawisza Enter, ponieważ korzystałem z tego podczas zaćmienia. – Zen

+0

lub czy jest tak, aby zintegrować to w pliku indent dla konkretnego języka? – Zen

10

autoindent odnosi się do niego niosąc nad obecnym poziomie wcięcia na kolejnych liniach. Aby uzyskać wcięcie zgodnie ze składnią, musisz również określić flagę, taką jak smartindent lub cindent.

+0

wcięcie nie jest prob, po prostu chcę wstawić znak nowej linii automatycznie po naciśnięciu Enter z poprawnym wcięciem – Zen

+0

Jestem zdezorientowany. Czy jesteś poza trybem wstawiania?Jeśli naciśniesz 'i', a następnie' Return', otrzymasz pożądane zachowanie? –

+0

Tak, jestem w trybie wstawiania, czego chcę, kiedy wciskam enter po tym, jak {chcę, żeby vim umieścił mnie w nowej linii w ramach zamknięcia}, w zasadzie pierwszy blok w moim pytaniu. – Zen

21

Znalazłem, że delimitMate robi dokładnie to, co opisujesz i więcej (to znaczy automatycznie wstawia koniec }). Zauważ, że musisz powiedzieć delimitMate, aby rozszerzyć powroty karetki, dodając let delimitMate_expand_cr=1 do swojej konfiguracji.

Z moich obserwacji wynika dokładnie to zachowanie w TextMate i SublimeText.

+0

FYI dla użytkowników delimitMate + neocomplcache: Jeśli używasz domyślnej konfiguracji .vimrc neocomplcache, będziesz musiał dostosować mapowanie , aby uwzględnić obie wtyczki. Więcej informacji [tutaj] (https://github.com/Raimondi/delimitMate/issues/111). Mój .vimrc ma teraz "imap pumvisible()? neocomplcache # smart_close_popup(): ' delimitMateCR'' i obie wtyczki działają tak, jak chcę je dla – bknoles

+4

Dla 'delimitMate'' expand_cr_1' nie działa ostatnio. Zamiast tego możesz użyć 'imap pumvisible()? "\ ": " delimitMateCR" '. –

17

Mam Ubuntu 12.04 i nie znalazłem pliku vimrc w katalogu domowym. Globalny plik vimrc był w /etc/vim/vimrc.
W tym pliku nie było prawie nic. Więc dla mnie to działało dodać to 3 linie do końca /etc/vim/vimrc

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

Kiedy wpiszesz { następnym razem zostanie on zmieniony przez połączenie {, Enter, }, w górę, koniec, Enter. cindent i autoindent doda wymaganą ilość zakładek.
P.S. Nie jestem dobry w podkręcaniu vima, więc niektóre wyjaśnienia mogą nie być tak dokładne. Tak myślę, że to działa.

+0

Dodałem "" na końcu ostatniej linii, aby zrobić wcięcie środkowej linii o jeden krok. To znaczy. inoremap {{} Skurpi

0

Na dole pliku, używam:

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

Na przykład Dockerfile:

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

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

Jeśli chcesz zachować tylko wcięcie, należy # vim: st ai si