Как удалить второй столбец в Vim?

12

У меня есть файл с разделителями табуляции, как:

name1   verb1   name2   verb2   etc...

Я хочу удалить второй столбец. Я попытался отредактировать один из этих ответов , но не был знаком с sedи awkне смог.

Может кто-нибудь мне помочь?

teaLeef
источник
@KasiyA оригинал ОП использовал \ t для обозначения вкладок.
SteelDriver
@steeldriver Хорошо, ты прав. Я думал, что это часть линии. удален. Но я отредактирован правильной в соответствии с первым постом .thanks
αғsнιη
1
Режим визуального блока vim не решает проблему? (Ctrl-V в обычном режиме, выберите столбец, xчтобы удалить)?
Rmano
@Rmano, это помогает, спасибо, но не могли бы вы рассказать, как перейти к концу файла в визуальном режиме? (Я попробовал Ctrl G, но он не работает).
teaLeef

Ответы:

10

В vim вы должны использовать команду

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

(замените TABза ним ноль или более вхождений любого символа, кроме как TABс ничем). Если ваш файл имеет только два столбца, вы можете использовать несколько более простой :%s/\t.*или :%s/\t.*$заменить первый TABи любые последующие символы до конца строки.

steeldriver
источник
22

Принятый ответ гораздо более элегантный, чем этот (я проголосовал за него!), Но если вы его не помните, вы можете напрямую использовать vim режим визуального блока . Откройте vim и перейдите (обычный режим) в первый угол столбца, например:

введите описание изображения здесь

Введите CTRL-Vи вы можете переместить курсор, чтобы выбрать столбец, это на полпути:

введите описание изображения здесь

Чтобы перейти в конец, нажмите G:

введите описание изображения здесь

блок кажется сломанным, потому что мы находимся на последней строке, которая является пустой; просто поднимитесь на одну строку (со стрелкой вверх или k), чтобы увидеть это снова ...:

введите описание изображения здесь

Теперь вы просто нажимаете, xчтобы удалить блок:

введите описание изображения здесь

Rmano
источник
6

Я бы использовал cutдля этого

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

Вы также можете использовать это как фильтр в vim (это заменит все строки в файле; вы также можете использовать (например) 2,9вместо того, %чтобы обрабатывать строки 2-9 или выбирать нужные строки V):

:%!cut -f1,3-

-f1,3-означает «печать первого поля, затем третьего поля и всех полей до конца строки». По умолчанию cutв качестве разделителя используется вкладка; если вам нужно что-то еще, используйте -dопцию (см. man cut).

evilsoup
источник
4

Вы можете попробовать либо:

:%norm WdW

или вручную в визуальном режиме:

  1. Перейдите во второй столбец (например, нажав:) W.
  2. Начало зрительно-блок по Ctrl+v.
  3. Выберите вторую колонку (например, нажав: W, G).
  4. Удалите его, нажав d.

Чтобы сделать это на месте из командной строки, попробуйте:

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

Связанный: Как написать литерал для клавиши Tab, чтобы использовать для движения?

Смотрите также:

kenorb
источник
Да, +1, но имейте в виду, что если у вас есть пустые строки в конце, шаг 3) может пойти не так ...
Rmano