Vim:如何从一个缓冲区读到另一个缓冲区

时间:2016-06-16 12:39:24

标签: vim buffer

在vim中,使用read命令将文件轻松读入当前缓冲区:

:r my.file

但是如果文件的路径很长,并且文件在另一个缓冲区中打开,我怎样才能读取缓冲区的内容,即。

:r {buffer_number}

有没有一种方法可以直接从一个缓冲区读取到另一个缓冲区而不使用yank缓冲区?

2 个答案:

答案 0 :(得分:6)

在命令行中,您可以使用#n来处理链接到缓冲区编号n的文件:

:ls      " list buffers
:r #3    " read from file associated with buffer 3

请注意,:r文件读取,而不是从缓冲区读取,并且缓冲区的内容可能与其关联文件的内容不同

如果你想访问缓冲区的内容,你无法真正避免编写脚本(如Luc Hermitte的回答)。

答案 1 :(得分:2)

您可以直接使用getline(1,'$')readfile(bufname(buffnumber))存储缓冲区的内容。但我想后者不能在您的上下文中使用,否则,您已直接使用:r

所以,你需要

  • 首先记住你的位置。 - > getwinid()bufnr('%')
  • 然后,转到带有正确缓冲区的窗口,或者只是更改当前缓冲区
  • 阅读其内容
  • 返回原处(即恢复初始缓冲区)
  • 并最终粘贴您已阅读的内容

可能是这样的:

" untested
function s:ReadBuffer(b) abort
  " + add test to be sure the buffer exists
  let b0 = bufnr('%')
  exe 'b ' . a:b
  let lines = getline(1, '$')
  exe 'b ' . b0
  $put=lines
endfunction

command! -nargs=1 -complete=buffer ReadBuffer call s:ReadBuffer(<f-args>)