fix several bugs

macro bug
vt frame bug
use ! in macro, which means no replacement