Vim PHP宏需聚焦小而准的结构化编辑动作,如加$this->前缀;录制前须清空选区、确保普通模式、光标位置可控;避免硬编码内容、缩进和引号操作,以防复用失效。
Vim 录制 PHP 宏不是“录一次就能通用”的操作,关键在动作可复用、光标位置可控、不依赖具体代码内容。
PHP 宏失效的常见原因是:录制时残留了可视模式选区、意外按了 v/V/Ctrl+v,或光标停在行尾/行首导致后续回放错位。回放宏时 Vim 会严格复现每一步光标移动,哪怕多按一个 $ 或少按一个 j,都会让后续 c、i 等命令作用在错误位置。
Esc)gg 或 gg0 把光标移到文件开头,避免从中间开始录-- VISUAL -- 或类似提示qa + 行内动作(如 0ciw 改单词)而非跨行可视选择qa 录制 + @a 回放,但别直接录“写 PHP 代码”宏本质是按键序列,不是智能脚本。直接录 qa → 输入 function test() { → Enter → return true; 这种操作,几乎无法复用:函数名、参数、缩进层级、花括号风格(K&R vs Allman)一变就崩。
$this->() array( 替换为 [ 并调整缩进$this-> 前缀”的宏:qa0f$ciw$this->(说明:" q
0 到行首,f$ 找第一个 $,ciw 改单词," 粘贴原内容, 退出插入)$user 的 $ 上),按 @a 即得 $this->user
PHP 中缩进不一致(空格 vs Tab)、单双引号混用、行尾注释(//)会让基于字符偏移的宏彻底失准。
>> 或 的缩进操作——不同文件缩进设置(shiftwidth、softtabstop)会导致回放缩进量错乱
i" → 输入内容 → ",遇到已有单引号字符串就会破坏语法// ...),0 移到行首后,ciw 会误删整个注释,建议加判断条件(需用 VimScript,非纯宏):s 替换配合宏,例如先 qa 录 0f(i(跳到第一个 ( 后插入),再用 :%s/func(\zs.*\ze)/$this->&\()/g 批量处理宏的生命力不在“多”,而在“小而准”。一个只做 ciw + + 插入固定前缀的 5 键宏,比录了 20 步却只能用在某一行的宏实用
