Czy istnieje polecenie usuwania linii (lub n linii) powyżej bieżącej? Powyżej = prąd nie jest uwzględniony.
Tj. Czy istnieje alternatywa, dkktóra nie usuwa bieżącej linii? Podobne do sposobu działania o/ Oi p/ P, ale z usunięciem.
Obecnie robię kdd, który przesuwa kursor o jedną linię w górę i usuwa go. Mogłem zrobić nnoremap <Leader>d kdd
i nnoremap <Leader>D jdd-
, ale mając alternatywę, która nie porusza się kursor wydaje się lepszym rozwiązaniem. Czy jest taki
key-bindings
cursor-movement
normal-mode
Martin Tóth
źródło
źródło
nnoremap <Leader>d kddj
innoremap <Leader>D jddk
?kddj
lubjddk
, pozycja kolumny nie jest zachowana. Nie mówię, że to duży problem, ale to denerwujące. Dla zapisukddj
przesuwa kursor o 1 linię poniżej pierwotnej pozycji. Ijdd-
wydaje się lepszą alternatywą dla,jddk
ponieważ przynajmniej powracam do pierwszej postaci niebiałej spacji. Jeśli linia poniżej linii, którą chcę usunąć, jest pusta, zostaję na początku linii.Odpowiedzi:
przecina linię powyżej bieżącej linii.
przecina 5 linię powyżej bieżącej linii (ale przesuwa kursor).
tnie 5 linii powyżej bieżącej linii.
tnie 5 linii poniżej bieżącej linii.
źródło
Jeśli użyjemy małego rejestru usuwania ”- możemy przywrócić pozycję kursora po usunięciu powyżej n wierszy.
Na przykład d0dgk"-Pusuwa powyżej 1 linii i przywraca kursor tam, gdzie był.
d0usuwa znaki z kursora do pierwszego znaku linii. Ponieważ 0jest to ruch wyłączny, znak pod kursorem nie jest usuwany. Usunięte znaki są umieszczane w małym rejestrze „-.
dgkusuwa powyżej 1 linii. Spowoduje to opuszczenie bieżącej linii, ponieważ gknie jest liniowe i wyłączne.
"-P wstawia tekst z małego rejestru usuwania "-.
To rodzaj włamania. Ale jeśli szukasz poleceń innych niż ex, rozważ użycie go.
źródło
"-P
nie"-p
. Ten ostatni trochę popsuje tekst.EDYCJA Nie znałem wbudowanych funkcji sugerowanych przez @Romainl w jego odpowiedzi: oczywiście należy wybrać metodę
-d
i,+d
ponieważ jest to o wiele prostsze niż dodawanie funkcji do twojego.vimrc
Może dodanie czegoś takiego do twojego
.vimrc
może być tym, czego chcesz:Funkcje te usuwają linię pod lub linię nad bieżącą i wracają do pozycji przed usunięciem.
Do funkcji
DeleteOver()
musimy przejść o jedną linię w góręnormal k
po usunięciu, ponieważ usunięcie zmienia numer oryginalnej linii, co się nie dziejeDeleteUnder()
Możesz także dodać to do swojego
.vimrc
Aby utworzyć odwzorowania wywołujące funkcje.
źródło
nostartofline
opcji.Być może poprawisz przepływ pracy, jeśli nie boisz się ... skoczyć :)
Przykład:
Twoje działania (tryb normalny, kursor znajduje się
_
)/I want
Enter
5dd
Ctrl-o
. Otóż to.Oczywiście odpowiedź romainl jest najlepsza, jeśli wszystko, co chcesz usunąć całe linie, i możesz łatwo policzyć ich przesunięcie (na przykład używając względnych numerów bielizny). Powyżej jest bardziej ogólny sposób „działania”: idź tam, używając czegoś, co liczy się jako skok: oznacza to, że zawsze możesz skoczyć do tyłu, po zmodyfikowaniu tekstu.
Na przykład, jeśli używasz bezwzględnych numerów linii, możesz zamienić na
/I want
Enter
coś podobnego78gg
lub78G
przeskoczyć bezpośrednio na ten numer linii.źródło
W oparciu o rozwiązanie ms-kim opracowałem nieco inną odmianę, która oszczędza pozycję.
OBS: Użyłem również tego postu jako odniesienia.
źródło
Jeśli chcesz usunąć zduplikowane linie w całym pliku, wykonaj następujące czynności:
Przykład:
W trybie komend
Jeśli chcesz początkowo listę ciągów znaków:
źródło