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?


@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.


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


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).


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ż:


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
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.