Синтаксис 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/^\([#\n]\)\@!/##DISABLE##/g
^([#\n])\@! означает "не # или перевод строки в начале строки"
У меня работает в vim 7.2
:map q /^[^#]<Enter>0i##DISABLE##<Esc>q
1Gq
Это работает в vim, но не в пакете vi, который не выполняет хвостовую рекурсию для отображений.
Может быть что-то вроде:
%s/^\([^#]\)\|!\($\)/##FOO##\1/g
Я знаю, это беспорядок со всеми этими побегами, но первая часть это строка не начинается с # [^#]
, Или (сбежавшая труба \|
) строка, которая не является пустой (^$
)
Если вы используете Vim, вас может заинтересовать плагин EnhCommentify.vim, который позволяет легко переключать комментарии.