У меня часто бывает ситуация, когда мне нужно применить текст вокруг региона. Для HTML и простых случаев уже есть библиотеки для этого. Но как насчет общего случая? Я хотел бы спросить, что я собираюсь вставить начало и конец региона.
elisp
text-editing
nperson325681
источник
источник
<?php
...?>
, а затем, когда вы выбираете регион и тип<?php
(или связывание клавиш), обернуть его в пару. Но на самом деле нет простого способа использовать эти библиотеки, если у вас много пар «один выстрел».Ответы:
Я погуглил и нашел этот пост Джона Д. Кука . Он демонстрирует, как создать простую интерактивную функцию, чтобы легко получить теги HTML / XML по всему региону. Из этого я изменил функцию, чтобы спросить дважды.
Что еще более важно, эта функция может также использоваться в качестве вспомогательного инструмента, например, когда вы хотите связать ключи, чтобы отобразить некоторые конкретные фрагменты текста.
источник
evil
, я использую то, что мешает здесь. Возможно, функция типаinteractive "r"
работала более надежно?Я бы предложил другой подход. Когда есть регион, по определению
point
должен быть в начале (или конце) региона, иmark
будет в конце (или начале). Это означает, что вы можете ввести текст, который вы хотите в точке, а затем использоватьexchange-point-and-mark
, то естьC-x C-x
, чтобы перейти к другому концу области. Введите вторую половину вашей обертки, и все готово.Вы не получите явного запроса на ввод текста, но я не могу представить, что был бы способ сделать то же самое с меньшими усилиями.
источник
multiple-cursors
настроить, чтобы вставить текст одновременно в начало и конец активной области.C-x C-x
. С вашим ответом вам нужно вызвать вашу функцию (C-c something
), и вам также нужно нажиматьreturn
после каждой записи. Поэтому независимо от того, что вы делаете, у вас есть еще два нажатия клавиш. Тем не менее, это не поможет, если вы хотите что-то позвонить от elisp.Просто ради разнообразия:
Другой способ сделать это с некоторым произвольным начальным и конечным текстом было бы использовать
replace-regexp
на области: матч.+
и заменитьbefore \& after
, или любой другой текст , который вы хотите использовать дляbefore
иafter
.Вы можете написать команду do для этого, но я думаю о случае, когда в данном файле вы хотите применить один и тот же начальный / конечный текст в нескольких местах. Вы можете записать макрос или просто использовать историю минибуфера для повторения в другом регионе.
Конечно, если текст, который вы хотите обернуть, может быть выражен как регулярное выражение, тогда вам даже не нужно будет выделять область и выполнять операции с
query-replace-regexp
буфером, но, вероятно, текст, который вы хотите обернуть, не такой последовательный.источник