Zastanawiam się, czy mogę wstawić nową linię bez wychodzenia z trybu normalnego. Na przykład mam dwie linie:
this is line one
this is line two
Kursor znajduje się na pierwszej linii. Teraz chcę nową linię między linią pierwszą a linią drugą, jak poniżej:
this is line one
this is line two
Wiem, że kiedy jestem w trybie normalnym, mogę po prostu nacisnąć o
. Ale to wejdzie w tryb wstawiania.
Jak mogę wstawić nową linię i pozostać w trybie normalnym?
normal-mode
Alex
źródło
źródło
Odpowiedzi:
Używam do tego mapowania:
W ten sposób możesz wstawić linię pod kursorem za pomocą
<Leader>o
i jedną w poprzedniej linii za pomocą<Leader>O
.Uwaga: Można argumentować, że wymaga to tyle samo naciśnięć klawiszy, ile,
o<Esc>
ale mam nadzieję, że wybrałeś swojego lidera, aby ułatwić tego rodzaju mapowanie. Nie jestem też pewien, czy istnieje wbudowany sposób na wykonanie tego.źródło
Rozwiązanie, które nie przechodzi przez tryb wstawiania, nie porusza kursorem i pozwala na użycie licznika do dodania kilku linii jednocześnie ( 3\oitp.):
źródło
Jeśli nie chcesz dodawać mapowań, możesz pociągnąć
yy
pustą linię, a następnie wkleićp
dla kursora poniżej iP
powyżej kursora.źródło
o
rejestrze za pomocą"oyy
i wklej stamtąd, gdy zajdzie taka potrzeba"op
.Osobiście polecam korzystanie z wtyczki Tima Pope'a Unimpaired . Zapewnia wiele mapowań, ale są to te, których szukasz,
[<space>
i]<space>
które tworzą puste linie odpowiednio powyżej i poniżej bieżącej linii. Unimpaired zapewnia również ładne mapowania do poruszania się po liście poprawek, liście buforów, przełączaniu opcji i wielu innych. Zobacz:h unimpaired
więcej.Jeśli nie chcesz używać nieuszkodzonej wtyczki, ale podobnie jak poniższe mapowania, w
~/.vimrc
pliku możesz umieścić kilka szybkich mapowań :źródło
Moje mapowanie wykorzystuje
Shift-Enter
. Różni się od innych tym, że kursor powraca do tej samej linii i kolumny za pomocą znaku o.źródło
<S-Enter>
nie działa w emulatorach terminali (działa tylko w gVim). Musisz więc wybrać inną kombinację klawiszy, aby jąTa odpowiedź Maxima Kim odmieniła życie:
i mój riff na ten temat:
Umieść te linie w swoim
vimrc
. Następnie przejdź na początek drugiej linii pliku i uderzyć Space, Enterlub udać się do końca pierwszej linii i nacisnąć Shift+Space, Enter. Albo doda pustą linię między pierwszą a drugą linią i pozostawi cię w trybie normalnym.Możesz ich również użyć do dowolnego innego pojedynczego klawisza - naciśnij klawisz Spacelub kliknij Shift+Spaceodpowiedni klawisz, który odpowiednio go wstawi lub doda.
źródło
Te mapowania zrobią dokładnie to, czego szukasz.
Wprowadzają one n nowych znaków przed lub za kursorem; utrzymywanie kursora dokładnie tam, gdzie jest, bez zmiany listy skoków.
Innym rozwiązaniem jest po prostu utworzenie skrótu, który wypełnia bezimienny rejestr nową linią. Następnie możesz po prostu użyć poleceń put, p lub P, aby wstawić znaki nowej linii. Na przykład:
źródło
Moje mapowanie tego
Różni się od statox, ponieważ utrzymuje kursor w tym samym miejscu.
źródło
<silent>
znaczy:h map-silent
.Moje osobiste rozwiązanie wstawia znak nowej linii do rejestru wyrażeń i wkleja go po bieżącej linii, a następnie przeskakuje z powrotem do pierwotnej pozycji:
źródło