vi [m]从另一个文件读取行的范围


9

在Linux上,file_B在vim中进行编辑,我想从添加10-25行file_A。示例:一个具有完整的带有相同标题的HTML文档集,是的,可以创建一个模板并从那里开始,但是仍然:

我正在寻找一种简单(优雅)的方法来从一个文件插入一系列行并将其添加到我当前正在编辑的文件中。在vim中。

到目前为止,我找到的解决方案并不是我要找的解决方案,

  • file_B命令中,:read file_A会将*整个file_A *添加到file_B中。太多了
  • 在vim中有复制和粘贴-但是为此必须已打开 file_A
  • file_A 内部,:10,25w! file_B会将指定行范围“发送”到file_B
    这似乎非常接近复制粘贴
  • 一个人可以在vim中打开多个窗口,
    但是当我在8英寸的屏幕上工作时,多个窗口使定向变得困难

由于找不到合适的解决方案,我想知道我是否误解了某些东西,或者到目前为止发现的方法是常用的并被视为标准方法。


看到这个问题,@Bernhard的答案也是那里那个问题的公认答案!
slm

@slm我知道这个答案,但是由于我没有将其放入找到的解决方案列表中,谢谢您的提示。我仍在寻找内建的东西vim。但这似乎遥不可及。我真的很想知道这是否只能通过外部命令来实现,因为就我vim现在所知,到目前为止,我受到的限制很少。
erch 2013年

@ cellar.dweller如果您确实想要更简单的方法,则可以使用其中的某种功能。
伯恩哈德

Answers:


11

我能想到的最好的解决方案是从外部调用sed并将其与:read !

:r !sed -n -e '10,25p' fileB

在这里不工作-为什么呢?首先,感谢您的帮助。我得到的是“ E34:没有上一个命令” [大致翻译],好像vim试图重复一个命令。据我了解,一步一步:vim的:r缩写read。我不知道sed如何使用它。当然,我fileB用实际文件替换了:)
erch 2013年

@ cellar.dweller我的答案被一个人更新了,该代码我得到了相同的错误。我回滚了它。看看这是否适合您。
伯恩哈德

@Stephane很好,可以缩短答案,但您的建议没有用。
Bernhard

现在可以了!要添加一点神秘感:以:10retc. 开头的内容将(只要存在)放在第10行。现在就像魅力一样。大。非常感谢!
erch 2013年

2
哎呀,对不起。忘记了vim的扩展!应该是:r!sed 10,25\!d。请注意,您不需要-e或引号,因此也可以:r!sed -n 10,25p简短地编写它。:r sed '10,$\!d;25q'以避免读取整个文件。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.