在vim中,如何在执行可视块内容时插入shell命令输出

In vim, how to insert shell command output when executing contents of visual block

使用 Vim,我经常在编辑时执行 bash 脚本的行, 选择带有可视块的行后使用 :'<,'>w !bash

现在我想将命令的输出插入到脚本中。 我该怎么做?

如果您希望您的代码被其输出替换,您只需从您的命令中删除 w。剩下的就是:

:'<,'>!bash`

它的作用类似于所选行的过滤器。参见 :help :!

如果您想像这样将代码的输出插入到自身下方:

echo 1
1

你需要有点创意:

:'<,'>t'>|'[,']!bash
  • :[range]t[address][range] 中的行复制到第 [address] 行下方。在这里,我们将视觉选择的行复制到它们自己下面。
  • | 分隔 Ex 命令。
  • '[,']!bash 的工作原理与上面类似:它通过 bash 过滤给定范围内的行。在这里,范围涵盖了最新更改的行,在本例中是我们刚刚复制的行。参见 :help '[

可能的改进…

  • 使用 :help :silent 减少命令噪音:

    :'<,'>t'>|sil'[,']!bash
    
  • 添加注释字符:

    :'<,'>t'>|sil'[,']!bash|sed 's/^/\# /'
    
  • 转成可视模式映射:

    xnoremap <key> :t'>\|sil'[,']!bash\|sed 's/^/\# /'<CR>