Usuń 100 wierszy z edytora vi za pomocą jednego polecenia

33

Korzystam z Ubuntu i próbuję usunąć wszystkie 100 wierszy z viedytora, ale dostałem pytanie o wywiad w jednym poleceniu.

mayur Mehta
źródło
Nie rozwiązanie VI, ale z wiersza poleceń: echo -n > <file>usuwa wszystkie wiersze z pliku (w rzeczywistości po prostu nadpisuje plik „”).
azz
3
@Der Nie trzeba w tym celu używać echo; > $filedziała dobrze.
CVn
4
Co to za firma, zadawanie pytań viw wywiadzie?
CVn
2
Odpowiedź na to pytanie jest prosta dzięki podstawowej wiedzy na temat vi. Na komputerze z zainstalowanym vimem (na Ubuntu polecam vim-gtkpakiet, ponieważ daje to dostęp do xclipboard w vimie), wpisz vimtutorw linii poleceń (nie w vimie), aby uzyskać interaktywny samouczek z podstaw. Nie powinno to zająć więcej niż pół godziny i jest to najlepszy przewodnik dla początkujących po korzystaniu z vi / vim, który prawdopodobnie znajdziesz.
evilsoup
1
@ MichaelKjörling Mógłbym sobie wyobrazić, że pojawi się w wywiadzie, jeśli wnioskodawca wspomniałby o wcześniejszym doświadczeniu z vi(ustnie lub przez wznowienie) lub jeśli pytanie poprzedzone było: „Ok, jako administrator musisz wiedzieć coś o edytorach wiersza poleceń, prawda ? Użyłeś vi?
Wildcard

Odpowiedzi:

62

W trybie normalnym rób

100dd

ddusuwa bieżący wiersz. Wcześniejsze polecenie 100powoduje, że powtarza się 100 razy.

Jeśli w pliku znajduje się mniej niż 100 linii, zaczynając od bieżącego wiersza, w zależności od viimplementacji, albo nie usunie żadnego, albo usunie tyle, ile jest. W przypadku vimzależy to od tego, czy opcja cpaka compatiblejest włączona, czy nie.

200_sukces
źródło
zła odpowiedź to tylko usuwanie bieżącej linii
maj Mehta
Chcę usunąć 100 wierszy za pomocą jednego polecenia na raz
Mayur Mehta
13
100ddjest poprawną odpowiedzią. Zastanawiam się, co robisz.
ott--
1
@ mayurMehta nie wiem, która firma zadaje takie pytania, i nie wiem, czego oczekują w odpowiedzi. Ale każdy początkujący użytkownik VI będzie wiedział, że 100dd jest poprawną odpowiedzią.
Munim
1
@vgoff Nie wiem .. Jeśli nie szukają ogólnego rozwiązania, aby sprawdzić swoje podstawowe umiejętności vim, to jest tylko podchwytliwe pytanie, aby zaskoczyć rozmówców. Powiedziałbym, że 100dd jest odpowiedzią. Jeśli ankieter zapyta „Co się stanie, jeśli plik ma mniej niż 100 linii od bieżącego kursora?”, Odpowiedziałbym: „Polecenie usuwa to, co może z bieżącego kursora”. To jest całkowicie rozsądne. Jeśli kursor nie wyjaśni, dlaczego kursor nie znajduje się w pierwszym wierszu? Nienawidzę takich podchwytliwych pytań.
Munim
44
  1. usuń 100 linii do przodu (w tym) bieżącej

    • powtórz dd (usuń bieżący wiersz) 100 razy:

      100dd
      
    • usuń z bieżącej linii do 99 linii do przodu

      d99j
      
  2. usuń 100 linii wstecz (włączając) bieżącą

    d99k
    
  3. usuń wiersze w określonym zakresie według numeru wiersza

    :1,100d
    
  4. usuń linie z zakresu rozpoczynającego się od bieżącej linii

    :.,.+99d
    

itd itd.

Bezużyteczny
źródło
2
cyfra 4 usunie bieżącą linię (0) do 101 linii (0 + 100), stąd 101 linii zamiast zadanej 100. spróbuj:.,+99d
Olivier Dulac
Drat, mam poprawne ruchy! Dzięki.
Bezużyteczne
100dd też nie działało dla mnie - ale # 4 powyżej działa dobrze dla mnie w VI pod Solaris 10.
DemiSheep
8

Jeśli wszystkie wiersze w pliku mają zostać usunięte, to polecenie vi określa zakres usuwania:

:1,$d

1oznacza pierwszą linię i $oznacza ostatnią linię

podejrzenie
źródło
lub :%d (w kontekście „:” „:% ...” jest skrótem do „: 1, $ ...”)
Olivier Dulac
również miłe: d Gklucze & rarr; zabij całą zawartość od faktycznej [np. górnej linii] do dolnej linii
erch
3

Chcesz usunąć wszystkie linie w pliku? Otwórz plik za pomocą vi. Podczas gdy na początku pierwszego wiersza - domyślnej lokalizacji kursora po otwarciu pliku - naciśnij, Esca następnie dG.

Uwaga: akcja dwskazuje usunięcie i Gwskazuje ostatni wiersz pliku. Tak więc, gdy naciśniesz dowolną linię dG, usuwa ona całą linię, zaczynając od bieżącej linii do ostatniej.

Jeśli wiesz, jakie kolejne linie do usunięcia - powiedzmy, z linii 101 do 200 - typ w następujących kluczowych sekwencji: Esc:101,200d.

Barun
źródło
Nie musisz naciskać klawisza Escape, jeśli właśnie otworzyłeś plik i znajdujesz się na początku pliku. Jesteś automatycznie (domyślnie) w trybie normalnym.
vgoff,
3

Bez względu na to, gdzie jesteś w pliku, możesz to zrobić ggdG

:%dporadziłby sobie lepiej przy mniejszej liczbie naciśnięć klawiszy. Cóż, licząc klawisze shifti enter, właściwie dwa kolejne naciśnięcia klawiszy niż wyżej.

Robi coś takiego 100ddbyłoby usuwać tylko do 100 linii, skąd jesteś, i że nie mogą usunąć wszystkie wiersze z pliku, w zależności od aktualnej pozycji linii.

vgoff
źródło
0

Esc n dd. n jest liczbą linii do usunięcia z bieżącej linii i włącznie z nią. Naciśnij przycisk „Esc”, następnie „n”, a następnie „dd”. Dla lepszego zrozumienia

Rida Abid
źródło
Jaka jest potrzeba ucieczki tutaj
Prvt_Yadav
Ta odpowiedź jest identyczna z odpowiedzią zaakceptowaną.
Kusalananda
Escape jest na wypadek, gdybyś był w trybie wstawiania.
Rida Abid