有没有办法在vim中列出所有打开的缓冲区?我想查看每个打开缓冲区的完整文件路径,并将列表保存到外部文件,或者将其粘贴到另一个文本文档中。
解决方案
这是一场非常艰难的比赛!以下所有3条建议都运作良好。我和Luc Hermitte's
一起去了我的vimrc:
noremap <silent> <leader>so :call writefile( map(filter(range(0,bufnr('$')), 'buflisted(v:val)'), 'fnamemodify(bufname(v:val), ":p")'), 'open_buffers.txt' )<CR>
所以现在输入,so
会将所有打开缓冲区的所有完整路径保存到文件open_buffers.txt
答案 0 :(得分:7)
我已经使用了“简单”:
echo map(filter(range(0,bufnr('$')), 'buflisted(v:val)'), 'fnamemodify(bufname(v:val), ":p")')
使用:
range(0,bufnr('$'))
拥有| List |所有可能的缓冲区数filter(possible_buffers, 'buflisted(v:val)')
将列表限制为实际列出的缓冲区 - 您可能更喜欢bufexist()
,它还会显示帮助缓冲区等。map(listed_buffer, 'nr_to_fullpath(v:val)')
将所有缓冲区编号转换为完整路径名bufname()
将单个缓冲区编号转换为(简化的)路径名fnamemodify(pathname, ':p')
从相对路径名获得完整的绝对路径名。将:echo
更改为call writefile(pathname_list, 'filename')
,这就是全部,或改为:put=
等。
答案 1 :(得分:2)
列出可以使用的缓冲区的绝对路径:
:!echo %:p
如果将其包装到录音中,您将获得所需内容,例如:
qq
:!echo %:p >> my_buffers
:bnext
q
现在,当你有缓冲区时,执行宏次数,例如:
10@q
您将在文件my_buffers
可能更好的方式: - )
答案 2 :(得分:2)
这应该有效:
:redi @"|ls|redi END
:new +pu
:%s/[^"]*"\([^"]*\)".*/\=fnamemodify(submatch(1), ":p")/e
:g/^$/d
说明:
:redi
会重定向消息:redi @"
会将邮件重定向到@"
又名未命名的注册:redi END
停止重定向:ls
将打印出所有非隐藏缓冲区:new
在分组中创建缓冲区:new +{cmd}
+cmd
将执行新缓冲区的命令。:new +pu
在新缓冲区:pu
或put命令
\=
的替换部分中的:s/
将执行表达式fnamemodify(submatch(1), ":p")
将展开捕获的数据submatch(1)
:g/^$/d
删除所有空行更多信息:
:h /\=
:h :g
:h :new
:h :pu
:h :redi
:h :ls
:h fnamemodify()
:h :d
答案 3 :(得分:0)
bufexplorer脚本显示了所有打开缓冲区的路径,但是它也显示了其他信息,因此不适合将其放入另一个文档中。这是一个screenshot