在我的.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/