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.


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.


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.


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ę


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.


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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.