如何在Vim中插入模式期间动态添加文本

时间:2013-12-16 05:57:20

标签: vim vim-plugin

我想要做的是创建一个干净的结构,在我的文件中添加注释,如下所示:

/*********************
 * This is a comment *
 *********************/

我设法添加了开始评论所需的初始结构:

/**********
 * [TEXT] *
 **********/

使用snipMate。但现在,每当我在区域[TEXT]中输入任何文本时,对于我输入的每个字符,都应在上下行中添加星号(希望您能得到我的观点)。

我想我可以使用键映射imap来实现这一点,但不知道如何处理这个问题。即便如此,我认为它会有点慢,所以有什么方法可以通过vim编程实现这一点吗?我只是希望有人指出我正确的方向。

如果有可用的插件,请同时提及。

3 个答案:

答案 0 :(得分:3)

虽然snipMate插件提供了镜像(即将当前占位符的类型内容复制到另一个位置),但它无法在其上运行转换(这里需要这个:你想要每个要键入的字符要翻译成星号)。这应该可以使用更现代的UltiSnips - The ultimate snippet solution for python enabled Vim插件。

尽管如此,我还是会请你重新考虑你的“干净”评论方法。如果您的样式需要在特定编辑器中使用自定义插件进行特殊设置,则您的同事/协作者可能无法使用相同的设置,因此可能会忽略您的方案。当你被迫在另一台计算机/编辑器上进行编辑时,这甚至可能是你。 IMO,你不会失去太多的美丽,但如果你坚持简单的格式化,可以获得很多可维护性,如下:

/****************************************
  This is a comment
****************************************/

特别是,删除尾随的右对齐*可让您使用gq快速重新格式化评论。

答案 1 :(得分:1)

我有一个像这样的75宽的块:

/***********************************/
/***********************************/
/***********************************/

保存在指定的寄存器中(“e”但可以是任何内容)。然后我在需要时粘贴它并用注释文本覆盖(“r”替换)中心线。

没有脚本但快速有效。如果我需要一个不同的注释方法,对Python说“#”,交换“e”寄存器的内容是微不足道的。

答案 2 :(得分:1)

我使用这种映射:

nnoremap <leader>g I// <Esc>A //<Esc>yyp0llv$hhhr-yykPjj

hsdjsfdsgdfsdgfsdgf

//---------------------//
// hsdjsfdsgdfsdgfsdgf //
//---------------------//

我确信您可以轻松更改它以符合您的横幅样式。