LINUX.ORG.RU

Есть ли более дешевый способ обработки параграфа - макросом?

 


1

3

Например, из:

CONFIG_DVB_NXT200X=m
CONFIG_DVB_OR51211=m
CONFIG_DVB_OR51132=m
# CONFIG_DVB_BCM3510 is not set
CONFIG_DVB_LGDT330X=m
CONFIG_DVB_LGDT3305=m
# CONFIG_DVB_LG2160 is not set
CONFIG_DVB_S5H1409=m

Нужно получить:

# CONFIG_DVB_NXT200X is not set
# CONFIG_DVB_OR51211 is not set
# CONFIG_DVB_OR51132 is not set
# CONFIG_DVB_BCM3510 is not set
# CONFIG_DVB_LGDT330X is not set
# CONFIG_DVB_LGDT3305 is not set
# CONFIG_DVB_LG2160 is not set
# CONFIG_DVB_S5H1409 is not set

Т.е. заменить на конце каждой опции '=' (неважно что после =; m или Y), если такое встретится, на 'is not set' и закомментировать строку.
При этом не повредить строки со значениеями отличными от =m, пустыми строками и так далее.

Это параграф. Он длинный и таких параграфов много.

Для решения этой задачи запишем макрос:

qa0f=c$ is not set<Esc>\\\q
где '\\\' у меня автокомент плагином vim-commentary, который учитывает filetype и комментирует нужным мне видом комента.

Далее, чтобы обработать целый параграф этим макросом, мне, на данном этапе знакомства с вимом, известен только такой способ: выделить параграф -> режим ком.строки normal @имя; :

V}:normal @a<CR>
Ведь макросы не принимают и не работают (?) с motions и экшонами (например '}', 'ap'), а count здесь не подходит, т.к. откуда мне знать сколько строк-то в параграфе.

Есть ли более дешевый способ обработки параграфа - макросом? Какие хаки возможны, что я упустил или делаю не так?

★★☆
Ответ на: комментарий от baverman

Смущает дороговизна: выделить, перейти в режим командной строки, ввести normal и @имя регистра, нажать <CR>.

Хотелось бы как моушином, например если макрос записан на x: '@x}' или '@xap' - куда удобнее, не?

science ★★☆
() автор топика
Ответ на: комментарий от science

ну так я могу такой макрос написать, что будет использовать вышенаписанные :s и :g! в контексте параграфа

qqvip:'<,'>s/=m/ is not set/<CR>vip:'<,'>g!/^#/s/^/# /<CR>q

переходишь на следующий параграф и @q, переход на следующий параграф можно вставить в макрос, тогда просто 1000@q или сколько надо.

habamax ★★★
()
Ответ на: комментарий от science

Нет не удобнее. В общем случае невозможно определить моушен для макроса.

Что будет значить 'ap' для макроса

qqGIhello world<ESC>gireturn back<ESC>:bn<CR>ggaTADA!!!<ESC>q

habamax ★★★
()
Ответ на: комментарий от baverman

http://www.vim.org/scripts/script.php?script_id=3271

круто, именно то, что мне нужно, спасибо. Но у меня не работает, например это: <Leader>@{0-9a-z".*+}{motion}

у тебя работал когда-нибудь этот замечательный плагин?

science ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.