2010-10-18 9 views
29

Chciałbym podzielić linię (w miejscu kursora) na dwie linie bez opuszczania trybu normalnego (wprowadzanie trybu wstawiania lub trybu wiersza poleceń). czy to możliwe?Jak przerwać linię w vimie w trybie normalnym?

Obecnie dostaję się do wybranej lokalizacji i wciskam klawisz "i", aby wejść do trybu wstawiania, "enter", aby przerwać linię na dwie, a następnie "esc", aby powrócić do normalnego trybu.

Nie próbuję ustawić maksymalną długość linii ani składni ani nic w tym stylu. Chcę tylko podzielić jedną linię na dwie linie bez opuszczania normalnego trybu. "J" dołącza do linii, na której znajduje się kursor, do linii poniżej, co jest przydatne. Chcę przeciwieństwa - podzielić jedną linię na dwie za pomocą jednego polecenia.

Odpowiedz

34

Spróbuj tego:

:nnoremap <NL> i<CR><ESC> 

następnie wystarczy nacisnąć Ctrl-J, gdy chcesz podzielić linię.

+2

Dokładnie tego oczekiwałem. Uważam, że to dziwne, że nie jest to wbudowane polecenie w vimie, ale dodałem linię do mojego pliku .vimrc i szczęśliwie się z tym pogadam. – Ted

+2

Dziękuję i doceniam odkrywanie funkcji, o której nigdy nie wiedziałem, że potrzebowałem do tej pory ... ;-) –

+5

Myślę, że lepiej jest użyć ': noremap' zamiast': map', i że jeszcze lepiej jest użyć ': nnoremap' w tym przypadku, ponieważ pytanie określa * tryb normalny *. – Benoit

20

Nie znam pojedynczego klucza, ale wiele razy robię "r", a następnie "Enter", aby przerwać linię.

"r" zastępuje bieżący znak pod kursorem bez wchodzenia w tryb wstawiania. To nie może być to, co chcesz, jeśli nie chcesz, aby zastąpić znak ...

+0

Nie działa dla mnie ... wstawia znak '^ M'. Prawdopodobnie zależy to od '& format pliku'. – Benoit

+0

@Benoit, 'fileformat' nie ma znaczenia podczas edycji; jest używany tylko do odczytu i zapisu. – graywh

2

O ile mi wiadomo, nie jest to możliwe bez wejścia w tryb wstawiania. Jednak makro go z czymś takim można (wymień Z pomocą cokolwiek klucz chcesz używać)

nmap Z i<cr><esc>k$ 

zasadzie to mapuje klawisz „Z”, aby wejść w tryb insert „i”, wstawić znak powrotu karetki „<cr>” opuścić tryb insert '<esc>', idą w górę linię 'k' i wreszcie przejść do końca wiersza '$'

2

Per tego duplikatu pytanie: How do I insert a linebreak where the cursor is without entering into insert mode in Vim?

Od wewnątrz vim, typ:

:map g i[Ctrl+V][Enter][Ctrl+V][Esc][Enter] 

ten odwzorowuje klawisz G, aby makro I [Enter] [Esc]

+0

Dzięki. Zrobiłem kilka wyszukiwania przed wysłaniem, ale myślę, że nie użyłem właściwych terminów. To była dobra dyskusja, z którą się łączyłeś, i czuję się źle, że napisałem duplikat, ale myślę, że dostałem nieco bardziej elegancką odpowiedź od Amardeep. – Ted

+0

Uważam, że lepiej jest używać map Vima (na przykład i ). Dokładniej określ także tryby mapy. – graywh

13

put kursor w pozycji I ...

r<Enter> 
+0

Nie wiem, dlaczego nie jest to najlepsza odpowiedź, ponieważ nie wymaga żadnych dodatkowych mapowań. –

+3

Ponieważ zastępuje znak w bieżącej pozycji znakiem \ n – caio

+0

również dlatego, że możesz chcieć przerwać linię na innym niż biały znaku spacji, na przykład w '(| (arg)' co oznacza 'arg)' przejdzie następna linia, ale tracisz jedną z parens – skamsie

9

podobne do innych odpowiedzi, ale nie zastąpi obecny charakter. wymagane remaps

R<enter>

nr.

+2

Zamknij, ale pozostawia użytkownika w trybie Insert, chce skończyć w trybie Normalnym. – Symmitchry

0

Możesz użyć nagrywania. Umieść kursor tam, gdzie chciałbyś wstawić podział wiersza. Wpisz qa aby rozpocząć nagrywanie do rejestru a (można użyć innego rejestru innego niż a jeśli chcesz. Następnie wpisz i (przełącznik w tryb wstawiania), Powrót (wstawić znak nowej linii), ucieczka (tryb wstawiania exit), q (kończy nagrywanie.) Teraz możesz wywołać tę sekwencję klawiszy, wpisując @a (gdzie a jest numerem rejestru używanym podczas uruchamiania nagrania, więc po prostu przesuwaj kursor tam, gdzie chcesz wstawić znak nowej linii i wpisz @a.

Powiązane problemy