Jak usunąć drugą kolumnę w Vimie?

12

Mam plik rozdzielany tabulatorami, taki jak:

name1   verb1   name2   verb2   etc...

Chcę usunąć drugą kolumnę. Próbowałem edytować jedną z tych odpowiedzi , ale nie znałem sedi awknie mogłem.

Czy ktoś może mi pomóc?

herbata
źródło
@KasiyA oryginał PO użył \ t do wskazania zakładek.
steeldriver
@steeldriver Ok masz rację. Myślałem, że to część linii. oddalony. Ale edytowane poprawny według pierwszy post .thanks
αғsнιη
1
tryb blokowania wizualnego vim nie rozwiązuje problemu? (ctrl-v w trybie normalnym wybierz kolumnę, którą xchcesz usunąć)?
Rmano
@Rmano pomaga dzięki, ale czy możesz mi powiedzieć, jak przejść do końca pliku w trybie wizualnym? (Próbowałem Ctrl G, ale to nie działa).
teaLeef

Odpowiedzi:

10

W vimie powinieneś być w stanie użyć polecenia

:%s/\t[^\t]*//

(zamień, TABpo której następuje zero lub więcej wystąpień dowolnego znaku, TABz wyjątkiem niczego). Jeśli twój plik ma tylko dwie kolumny, możesz użyć nieco prostszego :%s/\t.*lub :%s/\t.*$zastąpić pierwszy TABi dowolne kolejne znaki do końca linii.

steeldriver
źródło
22

Przyjęta odpowiedź jest znacznie bardziej elegancka (głosowałem!), Ale jeśli jej nie pamiętasz, możesz bezpośrednio użyć vim trybu blokowania wizualnego . Otwórz vim i przejdź (w trybie normalnym) do pierwszego rogu kolumny, tak jak poniżej:

wprowadź opis zdjęcia tutaj

Wpisz CTRL-Vi możesz przesunąć kursor, aby wybrać kolumnę, jest to w połowie:

wprowadź opis zdjęcia tutaj

Aby przejść na koniec, naciśnij G:

wprowadź opis zdjęcia tutaj

blok wydaje się uszkodzony, ponieważ znajdujemy się w ostatnim pustym wierszu; po prostu przejdź w górę o jedną linię (strzałką w górę lub k), aby zobaczyć ją ponownie ...:

wprowadź opis zdjęcia tutaj

Teraz wystarczy nacisnąć, xaby usunąć blok:

wprowadź opis zdjęcia tutaj

Rmano
źródło
6

Użyłbym cutdo tego

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

Możesz użyć tego jako filtru w vimie (spowoduje to zastąpienie wszystkich linii w pliku; możesz także użyć (na przykład) 2,9zamiast %do przetwarzania linii 2-9 lub wybrać linie, które chcesz V):

:%!cut -f1,3-

-f1,3-oznacza „wydrukuj pole pierwsze, a następnie pole trzecie i wszystkie pola do końca wiersza”. Domyślnie cutużywa tabulatora jako ogranicznika; jeśli potrzebujesz czegoś innego, skorzystaj z -dopcji (patrz man cut).

zła
źródło
4

Możesz spróbować:

:%norm WdW

lub ręcznie za pomocą trybu wizualnego:

  1. Przejdź do drugiej kolumny (np. Naciskając:) W.
  2. Uruchom blok wizualny przez Ctrl+v.
  3. Wybierz drugą kolumnę (np poprzez naciśnięcie: W, G).
  4. Usuń go, naciskając d.

Aby to zrobić w miejscu z wiersza polecenia, spróbuj:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

Powiązane: Jak napisać literał dla klawisza Tab do użycia w ruchu?

Zobacz też:

kenorb
źródło
Tak, +1, ale uważaj, jeśli masz puste linie na końcu kroku 3) może pójść nie tak ...
Rmano 18.09.19