Синтаксис 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

7 ответов

:g/^[0-9\*]/s/^/##DISABLED##/

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

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

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

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

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

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


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

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

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

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

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

Другие вопросы по тегам