在 Vim 中,我想输入...</p>
1x1<TAB>
并将其扩展为……</p>
(r 1)(d 1)(l 1)(u 1)
而对于……</p>
2x4<TAB>
扩展到……</p>
(r 2)(d 4)(l 2)(u 4)
我该怎么做呢?
如果您只需要一小部分固定的这些,您可以简单地定义:iabb
(尽管它们将扩展为Space,而不是Tab)。或者,有像snipMate这样的插件——它们甚至Tab默认使用扩展。
但是,如果您需要扩展任意数字,则固定方案将不起作用,您必须实现自定义映射,<Tab>
以提取光标之前的关键字并将其替换为扩展,如下所示:
:inoremap <Tab> <Tab>$<Esc>:substitute/\<\(\d\+\)x\(\d\+\)\s*\%#/(r \1)(d \2)(l \1)(u \2)/e<CR>0f$s
这会临时插入一个$
占位符以恢复替换后的原始光标位置;getpos()
你可以用/实现更好的东西setpos()
。