Próbowałem postępować zgodnie z następującymi wskazówkami:
Jak usunąć zaznaczony tekst w edytorze VI
ale
5dd
daje
E492: To nie jest polecenie edytora: 5dd
Wtedy spróbowałem:
5d
Który usuwa tylko jedną linię. Jak mogę usunąć wiele linii?
Próbowałem postępować zgodnie z następującymi wskazówkami:
Jak usunąć zaznaczony tekst w edytorze VI
ale
5dd
daje
E492: To nie jest polecenie edytora: 5dd
Wtedy spróbowałem:
5d
Który usuwa tylko jedną linię. Jak mogę usunąć wiele linii?
Odpowiedzi:
Wygląda na to, że wprowadzasz polecenia w trybie poleceń (inaczej „tryb Ex”). W tym kontekście :5dusunąłby wiersz numer 5, nic więcej. Aby 5dddziałać zgodnie z przeznaczeniem - to znaczy usunąć pięć kolejnych wierszy zaczynających się od kursora - wprowadź go w normalny tryb i nie poprzedzaj poleceń znakiem :.
To jest dla mnie łatwiejsze
/superuser/170795/how-can-i-select-and-delete-lines-of-text-in-vi
Jeśli znasz numery wierszy, możesz usunąć wiele wierszy (zakresów):
:[start_line_no],[end_line_no]d
Uwaga: d oznacza usuń
gdzie
start_line_no to linia początkowa no, którą chcesz usunąć, a end_line_no to linia końcowa no, którą chcesz usunąć. Linie między początkiem a końcem, w tym początek i koniec, zostaną usunięte.
Na przykład:
:45,101d
Wiersze od 45 do 101, w tym od 45 do 101, zostaną usunięte.
$do oznaczenia ostatniej linii w pliku. Więc :45,$dusunie każdą linię od 45 do końca.
/<\/div>/
:.,[end_line_no]d
Polecenia wymienione do użytku w trybie normalnym (przedrostek oznacza :tryb poleceń).
Przetestowane w Vimie.
Według kwoty linii:
Według numerów linii:
Backwards range given, OK to swap (y/n)?Jeśli wolisz metodę niewizualną i znasz numery linii, chciałbym zasugerować Ci inny prosty sposób.
Przykład
Chcę usunąć tekst z linii 45 do linii 101.
Moja metoda sugeruje wpisanie poniższego polecenia w trybie poleceń:
45Gd101G
Brzmi:
Przejdź do wiersza 45 (
45G), a następnie usuń tekst (d) z bieżącego wiersza do wiersza 101 (101G).
Zauważ, że na vimmożesz użyć ggzamiast G.
Porównaj z odpowiedzią @Bonnie Varghese, która brzmi:
:45,101d[enter]
Powyższe polecenie z jego odpowiedzi wymaga wpisania 9 razy, w tym enter, gdzie moja odpowiedź wymaga wpisania 8 - 10 razy. Zatem szybkość mojej metody jest porównywalna.
Osobiście wolę coś 45Gd101Gwięcej, :45,101dponieważ lubię trzymać się składni polecenia vi, w tym przypadku:
+---------+----------+--------------------+
| syntax | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command | 45G | d101G |
+---------+----------+--------------------+
Naciśnij Escklawisz, aby upewnić się, że nie jesteś w trybie edycji. Umieść kursor w pierwszej linii, która ma zostać usunięta. Wejdź :5dd. Bieżący wiersz i następne cztery wiersze powinny zostać usunięte.
Alternatywnie, jeśli masz włączoną numerację linii ...
Naciśnij Escklawisz, aby upewnić się, że nie jesteś w trybie edycji. Wpisz, :#,#dgdzie „#” oznacza początkowy i końcowy numer linii do usunięcia.
Jeśli chcesz usunąć zakres PO wyzwoleniu określonej linii, możesz użyć czegoś takiego
:g/^TMPDIR/ :.,+11d
To usuwa 11 wierszy (włącznie) po każdym spotkaniu ^TMPDIR.
Aby usunąć wszystkie linie użyj - ESC gg dG Aby usunąć kilka linii, powiedzmy 5, a następnie użyj ESC 5dd
Można to zrobić następująco: