vimrc命令在插入模式下添加uid

标签 vim

在我的.vimrc我有以下内容,在 Vim 可视模式下插入一个唯一的字母数字字符串。

vnoremap <leader>u :!pwgen -A 8 1<CR>

为了方便起见,我想在 Vim 插入模式下做同样的事情:像这样(不起作用: .vimrc ):

iabbrev uuid `pwgen -A 8 1`

其中缩写uuid (或 :uid: 或类似)触发 BASH pwgen命令(例如将 uuid 替换为 moh6sei5 )。


编辑

根据提及 Defining linux command inside vim abbreviations 后立即发表的评论

问题是strtime (那里)是一个 native Vim 函数( :h strftime ),而 pwgen是一个 BASH 函数。在 .vimrc :

  • 有效:

    iabbrev xxx <C-r>=strftime('%c')<CR>
    " Sun 02 Oct 2022 11:03:58 AM PDT
    
  • 不起作用:

    iabbrev uidd <C-r>=pwgen -A 8 1<CR>
    iabbrev uidd <C-r>=!pwgen -A 8 1<CR>
    iabbrev uidd <C-r>=`pwgen -A 8 1`<CR>
    ...
    

最佳答案

inoreabbrev <expr> uuid system('pwgen -A 8 1')->trim()

分割:

  • <expr>告诉 Vim 缩写的右侧将被计算为 Vim 表达式。
  • pwgen是外部命令,需要:help system()捕获其输出。
  • 外部命令通常以换行符结尾,因此您需要 :help trim()它。

关于vimrc命令在插入模式下添加uid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73928010/

相关文章:

windows - 如何仅使用键盘从 bash 复制粘贴到 vim,反之亦然?

vim - 在 Vim 中,如何删除单词的后缀?

macos - brew升级后vim坏了

vim - 在 OS X 中,clang_complete : where is the libclang. {so,dylib}?

vim - 为什么我的 vim 零宽度正向后查找存储反向引用?

vim - 删除 Vim 中的行并将其重定向到另一个文件

linux - Virtual Box 和 Windows 7 主机的 Gvim 重绘问题

更改缓冲区时 Vim 会丢失撤消历史记录

vim 使用带环境变量的 gf 选项

Vim:插入模式非常慢,有 400 多行