我想制作一个 vim 缩写,这样如果我在插入模式下输入“prf”,它会打印printf("");
并立即将我带回插入模式,但在两个引号之间。我不太明白该怎么做...有人能帮忙吗?
答案1
插入模式映射的缺点是,每次输入p
都会在缓冲区中延迟出现,因为 Vim 必须检查是否应应用完整的 prf 映射。最好使用缩写:
:ia prf printf();<Left><Left>
"
通过从缩写中省略,您可以通过键入来触发它prf"
,这避免了@Dmitry Alexandrov 描述的问题。
高级版本
片段就像内置的:abbreviate
类固醇一样,通常带有参数插入、镜像和多个停止功能。最早、非常著名(并且仍然广泛使用)的 Vim 插件之一是剪辑工具(灵感来自文本伴侣编辑器);不幸的是,它不再维护;尽管有一把叉子。一个现代的替代方案(需要 Python)是超级剪钳。还有更多,请参阅Vim Tips Wiki 上的这个列表。
需要评估的有三件事:首先,片段引擎本身的功能;其次,作者或其他人提供的片段的质量和广度;第三,添加新片段的难易程度。
答案2
尝试:inoremap prf printf("");<ESC>hhi
它将输入printf("");
,退出到正常(命令)模式(<ESC>
),向左移动 2 次(hh
),然后重新进入插入模式(i
)。
答案3
虽然映射在这里确实可能更合适,但我会回答你的字面问题:“如何在缩写中使用正常模式命令?”
实际上,您可以按照与在输入模式下使用正常模式命令完全相同的方式执行此操作:
:inoreabbr prf printf("");<Esc>2hi
或者
:inoreabbr prf printf("");<C-o>3h
在这里使用缩写的缺点是,它通常通过按空格键来扩展,并且这个空格不会被删除——而是被插入。因此,通过输入prf<space>
您将获得:
printf(" ❙");
其中❙
代表光标位置。要获取
printf("❙");
您必须按C-]
而不是<space>
。