如何在执行外部命令之后执行Vim命令?

如何在执行外部命令之后执行Vim命令?,vim,Vim,命令如下所示 autocmd! BufWritePost <buffer> mark s | $r ! ruby % | sed 's/^/\#=> /' | 's autocmd!BufwritePostMarks |$r!ruby%| sed的/^/\\\#=>/'|'s 在追加之前,它将追加输出并将光标移动到原始位置 这是我得到的错误: Error detected while processing BufWritePost Auto commands for &qu

命令如下所示

autocmd! BufWritePost <buffer> mark s | $r ! ruby % | sed 's/^/\#=> /' | 's
autocmd!BufwritePostMarks |$r!ruby%| sed的/^/\\\#=>/'|'s
在追加之前,它将追加输出并将光标移动到原始位置

这是我得到的错误:

Error detected while processing BufWritePost Auto commands for "<buffer=1>":
E485: Can't read file /var/folders/fw/045tt2q10zv1qkbfbw73y8c80000gn/T/vCDqw9b/7
处理“”的BufWritePost自动命令时检测到错误: E485:无法读取文件/var/folders/fw/045tt2q10zv1qkbfbw73y8c8000gn/t/vCDqw9b/7
如果在行尾删除
|
,则可以正常工作,但不会返回到标记的
s
位置。

有两个问题:

  • :read命令不能与其他Vim命令连接;它将以下所有文本视为要执行的命令。这会导致shell错误。请参见
    :帮助:条形码
    。您可以通过使用
    :execute
    包装来修复此问题
  • 是一个正常模式命令;要在命令行中使用它,需要在
    :normal
    Ex命令前面加前缀
  • autocmd!BufWritePost标记s |执行“$r!ruby%| sed's/^/\\\\\\\\\\\\\\\\=>”“|正常!”s
    
    autocmd! BufWritePost <buffer> mark s | execute "$r ! ruby % | sed 's/^/\#=> /' " | normal! 's