редактирование текста с помощью макросов - PullRequest
1 голос
/ 25 января 2010

Я сталкиваюсь с ситуациями, когда мне приходится повторять одну строку текста с небольшим редактированием.

Например:
1. вставить в table_name (col_one, col_two) значения (val_1, val_2);
2. вставить в table_name (col_one, col_two) значения (val_3, val_4);
3. вставить в table_name (col_one, col_two) значения (val_5, val_6);
и так далее ... (1000 записей)

Я имею в виду, я наберу только первый запрос и напишу макрос с помощью текстового редактора, чтобы сгенерировать необходимое количество запросов. Надеюсь, вы получите картину.

Пожалуйста, предложите лучший текстовый редактор для этой цели. Как я уже пробовал и потерпел неудачу с Ultraedit / Textpad. Возможно, я делаю что-то не так, потому что я не могу заставить Vim сделать это тоже.

Ответы [ 6 ]

1 голос
/ 27 января 2010

В приведенном примере, где изменяются только числа, это должно быть возможно с помощью редактора Zeus и макропрограммы. Например, этот скрипт numbers делает нечто очень похожее.

Для достижения требуемого результата используйте скрипт numbers сверху и внесите небольшие изменения, чтобы создать нечетных чисел и четных чисел script.

Затем в столбце отметьте 1000 строк нечетного столбца и выполните сценарий нечетных чисел . Затем в столбце отметьте 1000 строк четного столбца и запустите сценарий четных чисел .

0 голосов
/ 16 сентября 2011

Я публикую это, потому что ОП попросил ссылку на то, как это можно сделать в Vim или Emacs, в одном из комментариев

;; First set a special variable used for counting in macros to an initial value of 1
C-x C-k C-c 1  

;;type your text but use <C-x C-k C-i> in place of the numbers
;;<C-x C-k C-i> inserts the value of the counting var and automatically increments it by 1
insert into table_name (col_one, col_two) values (val_<C-x C-k C-i>, val_<C-x C-k C-i>)

;;repeat your macro 1000 times.
M-1000 C-x C-e
0 голосов
/ 25 января 2010

Почти любой текстовый редактор позволит вам копировать строки и редактировать их, конечно, vim.

Правильный способ решения этой проблемы - это делать это программно: создать файл шаблона, который сгенерирует нужный текстовый файл. m4, широко используемый макроязык, хорошо подходит для этой задачи, поскольку вы можете свободно смешивать текст и макросы. Ср http://en.wikipedia.org/wiki/M4_(computer_language)

например. (Непроверенные)

define(`txt`, "$1. insert into table_name (col_one, col_two) values (val_$2, val_$3);")
forloop(`i',1,1000,txt(i,eval(2*i-1),eval(2*i)))
0 голосов
/ 25 января 2010

Редактор, вероятно, не тот инструмент - если вы хотите сгенерировать все эти операторы вставки, вам, вероятно, лучше написать небольшую программу на языке сценариев, таком как perl или python.

0 голосов
/ 25 января 2010

Я думаю, что проблему легче решить, если для создания текста использовать сценарий оболочки, а не макросы в текстовом редакторе.

0 голосов
/ 25 января 2010

Выбор будет Vim или Emacs. Например. Emacs предлагает макросы и регулярные выражения, поэтому вы сможете делать то, что хотите. Хотя может быть неочевидным.

...