そのため、私がプログラマーとして行う一般的なタスクの 1 つは、ライブ システムのデバッグです。ライブ システムをデバッグする方法の 1 つは、コンソールから詳細ログを取得することです。
通常、ログ ファイルには、関心のある 1 行ごとに約 20 行の余分な行があります。
マクロ スクリプトを最小化するために、関心のある 20 行のうち 1 行だけを取得するマクロを作成しました。(必要のないすべての行を 20 置換するのとは対照的に、マクロは必要以上に 20 倍長くなります。) このマクロ コードの残りの部分は、その 1 行を *.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;
.vimrc ファイルにマップを追加して、VIM で簡単なマクロを作成する方法を知っています。
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 個の代替 (場合によってはそれ以上) と置換を行っているためです...そして、ログファイルを解析するためのそのような洗練されていない解決策を実行するのに時間を浪費するのに夢中になっています!