Vim中的文本扩展

时间:2012-12-27 23:26:58

标签: vim macros

在Vim中,我想输入...

1x1<TAB>

并将其扩展为......

(r 1)(d 1)(l 1)(u 1)

和...

2x4<TAB>

扩展为......

(r 2)(d 4)(l 2)(u 4)

我该如何做到这一点?

1 个答案:

答案 0 :(得分: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()实现更好的效果。