Wstawianie pustej linii w vimie?

25

Dość często stwierdzam, że muszę wstawić pustą linię poniżej lub powyżej bieżącej linii podczas edycji w vimie. oi Ozrobi to, ale następnie przełączą się w tryb wstawiania, co jest denerwujące. Czy jest jakieś wbudowane polecenie, aby to zrobić, które pozostanie w trybie normalnym?

Andrew Ferrier
źródło

Odpowiedzi:

10

Zarówno nienaruszona wtyczka Tima Pope'a, jak i moja własna wtyczka LineJuggler zapewniają [<Space>i ]<Space>mapowania, aby dodać [count]puste linie powyżej / poniżej bieżącej linii.

Zasadniczo sprowadza się do tego:

nnoremap <silent> ]<Space> :<C-u>put =repeat(nr2char(10),v:count)<Bar>execute "'[-1"<CR>
nnoremap <silent> [<Space> :<C-u>put!=repeat(nr2char(10),v:count)<Bar>execute "']+1"<CR>
Ingo Karkat
źródło
Teraz używam tego, więc oznaczyłem to jako „poprawne” rozwiązanie; ale wszystkie odpowiedzi tutaj są świetne.
Andrew Ferrier,
Świetna wskazówka, chociaż wolałem mapować <Space>oi <Space>Ozamiast tego.
simlev
26

Korzystałem z nich

map <Enter> o<ESC>
map <S-Enter> O<ESC>

w moim .vimrcod lat.

Naciśnij Enter, aby wstawić pusty wiersz poniżej bieżącego, Shift + Enter, aby wstawić go powyżej.

Pan Shunz
źródło
Zaznaczam to poprawnie, ponieważ jest to najprostsze rozwiązanie, chociaż wszystkie te odpowiedzi są dobre.
Andrew Ferrier,
Tak prosty! To powinna być zaakceptowana odpowiedź!
Sheharyar
Jeśli nie chcesz, aby kursor się poruszał po naciśnięciu Enter, umieść kna końcu pierwszej mapy i jna końcu drugiej mapy.
zondo
1
Zauważ, że mapowanie Shift-Enter działa tylko z wersją GUI vima, a nie z wersją terminalową. stackoverflow.com/questions/16359878/vim-how-to-map-shift-enter
ishmael
7

Jeszcze inny sposób wstawiania linii powyżej lub poniżej:

nnoremap <Enter> :call append(line('.'), '')<CR>
nnoremap <S-Enter> :call append(line('.')-1, '')<CR>

Zwróć uwagę, że rozwiązanie romainl i Mr Shunz przeniesie kursor do nowo wstawionej linii, podczas gdy ten, a także ten z Ingo Karkat, utrzyma kursor w tym samym miejscu.

Weź dwa
źródło
1

Nie, nie ma do tego wbudowanego polecenia.

Te mapowania robią, co chcesz:

nnoremap <leader>o o<Esc>
nnoremap <leader>O O<Esc>
romainl
źródło