我经常使用:r !uuidgen将新的uuid插入缓冲区。这可行,但是我通常尝试在引号之间插入uuid,而:r !uuidgen会在新行上打印uuid。

要解决此问题,我目前使用一个简单的键盘映射: >
nnoremap <C-u> mm:r!uuidgen<CR>dW"_dd`mp


此宏设置标记mm,插入uuid r!uuidgen,删除插入的uuid dW,删除多余的行"_dd,回到标记BACKTICKm,最后粘贴uuid p

在没有此宏/键绑定的情况下,游标之后是否有:r的方法,这浪费了寄存器?

评论

SU问题,也有类似的解决方法。

#1 楼

您可以使用表达式寄存器"=system()

<C-r>=system("uuidgen | tr -d '\n'")<CR>


在插入模式映射中看起来像这样: >
,或带有表达式映射:

inoremap <key> <C-r>=system("uuidgen | tr -d '\n'")<CR>


#2 楼

在插入模式下,您可以按Ctrl-R,然后键入:要解决此问题,我们可以使用:

=system('uuidgen')


删除换行符。

uuidgen


插入寄存器的内容。在键入CTRL-R和第二个
字符之间,将显示'“',表示您应该输入
寄存器的名称。

[..]

'='表达式寄存器:提示您输入一个表达式(请参阅
表达式)


将其绑定到Ctrl-u就像您的示例,可以使用:

=system('uuidgen')[:-2]


#3 楼

再加上一个:python

:py import uuid, vim; vim.command(':normal i' + str(uuid.uuid1()))


您可以映射为:

:inoremap <key> <esc>:py import uuid, vim; vim.command(':normal a' + str(uuid.uuid1()))<cr>a

Python UUID模块。

评论


但是,这是一种相当扭曲的方法。

–muru
15年2月16日在20:41

#4 楼

这可能不如使用纯vim解决方案可取,但是,如果使用Ultisnips之类的代码段管理器,则可以尝试添加如下代码段: br />这样,您可以键入uuid并在插入模式下按下扩展触发器,并且uuid将被相关shell命令的输出所替代。当然,这可以很容易地适应其他命令,并且可以通过Ultisnips文档中概述的强大方式进行扩展。