Как удалить кавычки вокруг первых двух столбцов в Vim?

Скажем, у меня есть следующий стиль строк в текстовом файле:

"12" "34" "some text     "
"56" "78" "some more text"
.
.
.
etc.

Я хочу удалить кавычки вокруг первых двух столбцов. Каков наилучший способ сделать это с помощью Vim (в настоящее время я использую gVim)?

Я выяснил, как по крайней мере удалить начальную цитату каждой строки с помощью визуального режима, а затем введите команду '<,'>s!^"!!

Мне интересно, есть ли способ выбрать весь столбец текста (один символ идет прямо по файлу... или более 1, но в этом случае я бы хотел только одного). Если это возможно, тогда вы сможете применить команду x (удалить символ) ко всему столбцу.

Там могут быть лучшие способы сделать это. Я ищу любые предложения.


Update

Просто и FYI, я объединил пару предложений. Мой _vimrc файл теперь имеет следующую строку:

let @q=':%s/"\([0-9]*\)"/\1/g^M'   

(Примечание: ^M CTRL Q + Enter для эмуляции нажатия клавиши Enter после запуска команды)

Теперь я могу использовать макрос через @ Q, чтобы удалить все кавычки из обоих столбцов номера в файле.

Ответы

Ответ 1

Control-V используется для выбора блока. Это позволит вам выбирать вещи в одном столбце символов.

Кажется, что вы хотите удалить цитаты вокруг чисел. Для этого используйте

:%s/"\([0-9]*\)"/\1/g

Вот список какие шаблоны вы можете использовать с vim.


Существует еще одна (вроде бы уродливая) форма, которая ограничивает 4 замены на строку.

:%s/^\( *\)"\([ 0-9]*\)"\([ 0-9]*\)"\([ 0-9]*\)"/\1\2\3\4/g

И если у вас есть sed удобный, вы можете попробовать их и из оболочки.

head -4 filename.txt | sed 's/pattern/replacement/g'

который попробует вашу команду в первых 4 строках файла.

Ответ 2

использовать команды визуального блока:

  • режим запуска с помощью Ctrl-v
  • указать движение, например. G (до конца файла), или используйте клавиши "вверх/вниз"
  • для выбранного блока определяют действие, например. 'd' для удаления

Подробнее см.  : h визуальный режим

Ответ 3

Скажите, хотите ли вы удалить все столбцы, кроме первого, простой и простой способ - ввести это в Vim:

:%!awk '{print $1}'

Или вам нужны все столбцы, кроме первого, вы также можете сделать это:

:%!awk '{$1="";$0=$0;$1=$1;print}'

Действительно, для выполнения квеста требуется внешний инструмент, но awk установлен в Linux и Mac по умолчанию, и я думаю, что люди, не имеющие системы UNIX, редко используют Vim в Windows, иначе вы, вероятно, знали, как получить Windows версия awk.

Ответ 5

Хотя этот случай довольно просто исправить с помощью регулярного выражения, если вы хотите сделать что-то еще более продвинутое, я также рекомендую записывать макрос, как Bryan Ward. Кроме того, макросы мне становятся легче, чем вспоминать, какие символы нужно избегать в regexes vim. И макросы хороши, потому что вы можете сразу увидеть, что ваши изменения происходят и работают с преобразованием строки в меньших бит за раз.

Итак, в вашем случае вы бы нажали qw, чтобы начать запись макроса в регистре w (вы можете, конечно, использовать любую букву, которую хотите). Обычно я запускаю свои макросы с помощью ^, чтобы перейти к началу строки, чтобы макрос не полагался на местоположение курсора. Затем вы можете сделать f ", чтобы перейти к первому", x, чтобы удалить его, f ", чтобы перейти к следующему" и x, чтобы удалить это тоже. Затем q закончить запись.

Вместо того, чтобы сделать ваш макрос на следующей строке, я на самом деле уже сегодня понял, что вы можете просто V (визуально выбрать линию) все строки, к которым вы хотите применить свой макрос, и выполнить: normal @w, который применяет ваш макрос в зарегистрируйте w для каждой визуально выбранной линии.

Ответ 6

Вы также можете создать макрос (q), который удалит кавычки, а затем опустится до следующей строки. Затем вы можете запустить его несколько раз, указав vi, сколько раз его выполнять. Поэтому, если вы храните макрос, чтобы сказать букву m, вы можете запустить 100 @m, и он удалит кавычки для 100 строк. Для получения дополнительной информации о макросах:

http://vim.wikia.com/wiki/Macros

Ответ 7

Другие решения хороши. Вы также можете попробовать...

:1,$s/^"\(\w\+\)"/\1/gc

Для получения дополнительной справки Vim regex также см. http://vim.wikia.com/wiki/Search_patterns.

Ответ 8

  • Запустите визуальный блок Ctrl+v.
  • Перейдите в конец и выберите первые два столбца, нажав: G, EE.
  • Тип: :s/\%V"//g, который приведет к следующей команде:

    :'<,'>s/\%V"//g
    

    Нажмите Enter, и это приведет к удалению всех " вхождений в выбранном блоке.

Смотрите: Применение заменителей к визуальному блоку в Vim Wikia