: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
的方法,这浪费了寄存器?#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文档中概述的强大方式进行扩展。
评论
SU问题,也有类似的解决方法。