Итак, одна из общих задач, которую я выполняю как программист, - это отладка работающей системы. И одним из способов отладки работающей системы является захват подробного журнала с консоли.
Обычно в файле журнала содержится около 20 дополнительных строк для каждой интересующей меня строки.
Чтобы минимизировать мой макрос-скрипт, я занялся созданием макроса, который будет захватывать ТОЛЬКО одну строку из 20, которая мне интересна! (В отличие от выполнения 20 замен для всех строк, которые я не хотел ..., что сделало бы макрос в 20 раз длиннее, чем нужно.) Остальная часть этого макрокода превратит эту одну строку в * .csv файл, чтобы я мог играть с числами в Matlab или Excel, как я считаю нужным.
Вот код для макроса (эти команды являются специальными командами Ultra Edit):
Clipboard 1
ClearClipboard
Loop
Find RegExp "{*}DBGLINE: STR1 ( * ) STR2 ( * )^p"
IfFound
CopyAppend
Else
ExitLoop
EndIf
EndLoop
SelectAll
Delete
Paste
Find RegExp "{*}DBGLINE: STR1( "
Replace All ""
Find RegExp " ) STR2 ( "
Replace All " , "
Find RegExp " )*^p"
Replace All "^p"
ClearClipboard
* К вашему сведению, Я опубликовал API / описание того, что каждая команда делает онлайн.
Позвольте мне рассказать о более понятном для человека псевдокоде, что делает этот макрос:
buffer = "";
// Keep finding $REGEX until EOF
while(1) {
if( Find $REGEX ) {
Select the text;
} else {
break;
}
buffer += selected piece of text;
}
// Now we can focus only on the selected lines from the log file
Select the entire text in the file;
Delete all selected text;
Paste the buffer into the text file;
// Convert the human readable text into a *.csv file
Parse out all the non-numerical content;
Replace with " , " commas;
Я знаю, как создавать простые макросы в VIM, добавляя карту в мой файл .vimrc:
map $KEYBOARD :%s/$STR_A/$STR_B/gc<CR>
Но мне было интересно, есть ли какой-нибудь способ сделать while (1) и CopyAppend в макросе. Как в какой-то определенной функции .vimrc:
function! CustomScript1()
...
" TODO: vim commands here
...
endfunction
map $KEYBOARD :call CustomScrip1()<CR>
Итак, как бы вы изменили вышеуказанный макрос UltraEdit в функцию VIM?
Мне действительно нужно получить возможность воссоздать этот вид сценария в VIM, потому что я в настоящее время застрял, выполняя 20 замен (иногда больше) и замен ... и это сводит меня с ума, тратя впустую мое время, занимаясь такими неуместными решение разбора файла журнала!