在vim中,使用read命令将文件轻松读入当前缓冲区:
:r my.file
但是如果文件的路径很长,并且文件在另一个缓冲区中打开,我怎样才能读取缓冲区的内容,即。
:r {buffer_number}
有没有一种方法可以直接从一个缓冲区读取到另一个缓冲区而不使用yank缓冲区?
答案 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>)