5 ms·
Digging into this a bit, here's the command I thought I wanted: :s/.*/printf("& -- %d\\n", __LINE__); & This only works on lines that don't have string li
by gcr 3y ago
Digging into this a bit, here's the command I thought I wanted:
:s/.*/printf("& -- %d\\n", __LINE__); &
This only works on lines that don't have string literals and behaves badly on lines that span block boundaries.
I had confused @ and &
- king_geedorah 3y agoMakes sense. I suppose one could also use a debug macro that stringifies the statement to avoid the problems you described. Might be something like: #define DEBUG_PRINT(stmt) printf(#stmt“ — %d\n”, __LINE__) Then your replacement could be something like: s/.*/DEBUG_PRINT(&); &; Which would print out the statement being executed and the line it is at in the program. Also you’ll want :%s instead of :s, as the latter will only replace on the line on which the cursor is positioned. Come to think of it, you’ll probably not want this to happen on lines which are themselves preprocessor directives or those with comments, function signatures, or (exclusively) punctuation like with braces. All this to say, I’m sure it could be done, but it gets into the weeds very quickly.