Назад | Перейти на главную страницу

синтаксис vi для закомментированных строк без комментариев (cron)

Кто-нибудь знает, можно ли в vi заменить комментариями только раскомментированные / непустые строки?

Если я хочу заменить закомментированную строку чем-то, что я знаю, я могу использовать:% s / ^ # / ## foo ## / g - но я ищу противоположное этому.

Пример файла:

# Some user's cron

# Test comments
00 00 * * * ~/somescript.sh

Ожидаемый результат:

# Some user's cron

# Test comments
##DISABLE##00 00 * * * ~/somescript.sh
:g/^[0-9\*]/s/^/##DISABLED##/

Эта часть «g / RE /» выбирает все строки, которые начинаются с числа или символа *. Затем "s / RE / replace /" выполняет работу на всех выбранных строках.

:%s/^\([^#]\)/##DISABLE##\1/
:%s/^\([#\n]\)\@!/##DISABLE##/g

^ ([# \ n]) \ @! означает "не # или новую строку в начале строки"

У меня работает в vim 7.2


sed -i -e 's/^\([^#]\)/#\1/g' /etc/cronfile

Может быть что-то вроде:

%s/^\([^#]\)\|!\($\)/##FOO##\1/g

Я знаю, что это беспорядок со всеми этими побегами, но первая часть строки не начинается с # [^#], ИЛИ (Ускользнувшая труба \| ) непустая строка ( ^$ )

:map q /^[^#]<Enter>0i##DISABLE##<Esc>q
1Gq

Это работает в vim, но не в стандартном vi, который не выполняет хвостовую рекурсию для сопоставлений.

Если вы используете Vim, вас может заинтересовать EnhCommentify.vim плагин, который позволяет легко переключать комментарии.