Как удалить кавычки, окружающие первые два столбца в Vim? - PullRequest
15 голосов
/ 22 июня 2009

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

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

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

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

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

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


Обновление

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

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

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

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

Ответы [ 8 ]

28 голосов
/ 22 июня 2009

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

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

Подробнее см. : h visual-mode

18 голосов
/ 22 июня 2009

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 строках файла.

4 голосов
/ 10 октября 2013

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

:%!awk '{print $1}'

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

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

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

3 голосов
/ 22 июня 2009

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

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

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

3 голосов
/ 22 июня 2009

См. редактирование столбца в vim . Он описывает вставку столбца, но в основном он должен работать аналогично удалению.

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

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

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

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

1 голос
/ 22 июня 2009

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

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

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

1 голос
/ 22 июня 2009

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

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

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