有没有办法列出Vim中所有打开的缓冲区?我想查看每个打开的缓冲区的完整文件路径,并将列表保存到外部文件,或将其粘贴到另一个文本文档中。
溶液
这是一个非常艰难的比赛!下面的三个建议都很有效。我选择了Luc Hermitte的建议,并将其添加到我的.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条答案
按热度按时间ckocjqey1#
这应该可行:
说明:
:redi
将重定向邮件:redi @"
将把消息重定向到@"
,即未命名寄存器:redi END
停止重定向:ls
将输出所有非隐藏缓冲区:new
在拆分中创建缓冲区:new +{cmd}
+cmd
将执行用于新缓冲器的命令。:new +pu
对新缓冲区执行:pu
或put命令:s/
的替换部分中的\=
将执行表达式fnamemodify(submatch(1), ":p")
将扩展捕获的数据,即submatch(1)
:g/^$/d
删除所有空行更多信息:
pxiryf3j2#
bufexplorer脚本显示了所有打开的缓冲区的路径,但是它也显示了其他信息,因此它不适合用于拖动和粘贴到其他文档中。
vxf3dgd43#
我早就用了“简单”:
具有:
range(0,bufnr('$'))
来拥有|列表|所有可能的缓冲区编号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=
,等等。ncgqoxb04#
要列出缓冲区的绝对路径,可以用途:
如果您将其打包到录音中,您将获得所需的内容,例如:
现在执行宏的次数与您有缓冲区的次数相同,例如:
结果将保存在文件
my_buffers
中不过可能是更好的方法:-)