vim - удалить все между вкладками - PullRequest
3 голосов
/ 04 марта 2011

У меня есть файл с разделенными табуляцией данными.Мне нужно удалить 2 столбца.Итак, какие команды я могу использовать, чтобы удалить все с текущей вкладки до следующей вкладки?

Ответы [ 5 ]

5 голосов
/ 04 марта 2011

Для удаления столбцов 4 и 5:

:%s/^\(.\{-}\t\)\{3}\zs.\{-}\t.\{-}\t//

Пояснение:

^  => start of line

.\{−} => as few characters as possible
\( .\{-}\t \)\{3} => three times as few characters as possible followed with a tab

\zs => start of match

Это может быть понятнее с переключателем \v:

:%s/\v^(.{-}\t){3}\zs.{-}\t.{-}\t//
3 голосов
/ 04 марта 2011

Я думаю, что Shift + Ctrl + V это то, что вы ищете.

http://jvi.sourceforge.net/javahelpset/jvi-vis_block.html

2 голосов
/ 04 марта 2011

Хотя вы можете использовать регулярные выражения, лучше использовать простые f или t нормальные команды: когда вы находитесь на первом символе первого столбца, который хотите удалить, d2f<Tab> удалит этот и следующий столбцыесли только один столбец не может включать в себя символ новой строки.Если это возможно, то d2/<Tab>/e<CR> (или d2/\t/e<CR>) будет делать то, что вы хотите.Чтобы развернуть его в других строках, используйте макросы: qaqqa01f<Tab>d2t<Tab>j@aq@a:

  1. qaq: очистить регистр a (начинает запись макросов, которые будут сохранены в регистре a, а затем немедленно останавливаетсязапись перед вводом чего-либо еще);
  2. qa: начать запись макросов в регистр a;
  3. 0: перейти в самое начало строки;
  4. 1f<Tab>: переход к следующей вкладке.1 здесь можно опустить.Если вы хотите удалить первый столбец, пропустите все движение;
  5. d2t<Tab>: удалите до второй следующей вкладки;
  6. j: перейдите к следующей строке;
  7. @a: запускать макросы, хранящиеся в регистре a.В данный момент он пуст (потому что он был очищен в 1-м элементе), поэтому на самом деле ничего не сделано;
  8. q: прекратить запись макросов;
  9. @a: запустить сохраненные макросыв регистре a.Содержит пункты 3.-7.и в 7-м пункте он запустится сам.
2 голосов
/ 04 марта 2011

Должно ли это быть сделано в vim? Если у вас есть командная строка Unix, я бы пошел вместо старой доброй команды cut. Например, следующее будет содержать первый столбец, а все, включая & после 4-го (отбрасывает 2 и 3)

cat filename | cut -d"\t" -f1,4- > outputfile
1 голос
/ 04 марта 2011
:%s:\t[^\t]\+\t:\t\t:

Это удаляет все между двумя вкладками.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...