在 VI 编辑器中使用 shell 命令输出

Using shell command output within VI editor

我刚刚开始使用类似 vi 的编辑器,我想知道是否可以在一行中插入 shell 命令的输出,例如,编辑 /etc/shadow 与 vipw -s

prueba4::16586:0:99999:7:::
~
~
~
~
~
~
~
~
~

我的目标是简单地更改用户的密码。 这就是我尝试的: 1)使用光标键定位到用户prueba4的密码摘要字段。然后使用 x 命令删除旧摘要的每个字符。 2) 按 Esc。然后输入

:r!mkpasswd my..password my..salt

3) 我得到了想要的输出,但它是换行写的,而不是我在按 Esc 键之前编辑的最后一个 space,然后按“:”

是否可以将摘要写在它所属的地方?

:r! 命令始终有效 'linewise',因此它无法在给定行 内插入任何文本。

您可以使用以下方法将命令的结果分配到 'register'(vim 的位置以保存被抽出、剪切等的字符):

:let @a=system("your_command")

然后当您的光标位于您想要文本的位置时,使用以下方式放置寄存器的内容(您通过):
<C-R>a 在位置
处于插入模式时 或
"ap 在正常模式下位于位置左侧的字符(在本例中为“:”)