如何查看所有vim开放缓冲区的文件路径?

时间:2011-08-29 21:41:39

标签: vim

有没有办法在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

中的当前目录

4 个答案:

答案 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