使用正确的缩进附加外部命令的输出

时间:2013-08-14 18:53:52

标签: vim

我已经知道我可以:read !lsls的输出附加到我的缓冲区中。如果我想为输出得到正确的缩进怎么样?

示例:我的缓冲区看起来像

def foo
  # run :read !ls here
end

2 个答案:

答案 0 :(得分:4)

最常见的方法是使用>后跟一些动作缩进区域,然后通过.命令重复缩进。

  • 执行:r!ls以读取ls shell命令的输出。
  • 通过`[移至输出顶部。
  • 通过>`]
  • 缩进输出
  • 只需使用.命令重复缩进,直到更正。

[]标记分别设置在上次更改文本的开头和结尾。在这种情况下,输出:r!ls命令。

如需更多帮助,请参阅:

:h `[
:h .

答案 1 :(得分:1)

可以通过在插入模式下将<C-R>=system()相结合来实现此目的。

将光标移动到目标位置。然后输入插入模式并输入:

<C-R><C-P>=system('ls')<Enter>

<C-R><C-P>表示两个关键组合 Ctrl R Ctrl P ,一个在其他。只要您使用=进行此操作,光标就会下拉到提示符,您可以在其中输入system('ls')来完成命令。

应该这样做。

这里的技巧是用system()代替:read!system()是一个函数,因此是一个表达式,所以我们可以在插入模式下将它与表达式寄存器结合起来。有关此特殊寄存器的更多信息,请参阅:h @=

您可能已经在插入模式下熟悉<C-R>以插入某些寄存器的内容。 <C-R><C-P>就像它一样,但另外它“修复”缩进给你。文档位于:h i_CTRL-R_CTRL-P