Arhn - архитектура программирования

Vim заменяет шаблон конкретным условием

Мне нужно заменить ;\s*\<do\> на \rdo в Vim. Однако мне также нужно убедиться, что ;\s*\<do\> не заменяется, если перед ним стоит символ комментария Фортрана !, то есть в шаблоне поиска !.*;\s*\<do\>. Например, ; do в строке без комментариев

j=2; do i=1, 10

следует заменить как

j=2
do i=1,10

Но ; do в следующей комментируемой части заменять не следует,

 k=3 ! j=2; do i=1, 10 

Как я могу сделать это в vim? Пробовал \(!.*\)\@!;\s*\<do\>, не работает.

03.09.2017

  • Можете ли вы опубликовать пример входного файла и ожидаемый результат? 04.09.2017
  • Я не думаю, что вам следует задавать этот вопрос здесь, суперпользователь может быть лучше 04.09.2017
  • Существует также vi.stackexchange.com, но вопросы vi(m) всегда принимались на SO... 04.09.2017
  • Вопрос был обновлен с примером. 04.09.2017

Ответы:


1

Я отредактировал этот ответ на основе вашего примера:

Попробуйте использовать :g!/<pattern1>/s/<pattern2>/<replacement>/g:

:g!/!.*/s/\v;\s*do/\rdo/g

Это приводит к замене pattern2 на replacement только в строках, не содержащих pattern1.

Исходный ответ:

Следующий шаблон должен делать то, что вы просили: /[^*]\{0,1\}\zs;\\s\*\\<do\\>. Вы можете использовать его, чтобы заменить его чем угодно, например. %s/<pattern>/\rdo/g.

03.09.2017
  • обратите внимание, что начальный / - это команда поиска, а не часть фактического регулярного выражения. 04.09.2017
  • Это не работает. Может я не правильно формулирую свой вопрос. Под !.*;\s*\<do\> я подразумеваю шаблон поиска. Смотрите обновленный вопрос. 04.09.2017
  • извините, прежде чем вы добавили пример, казалось, что вы пытаетесь заменить буквальные шаблоны поиска. 04.09.2017
  • Наконец-то я нашел альтернативный способ сделать совпадение, \c\(!.*\)\@<!;\s*\<do\> 04.09.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..