Vim中如何让:b#跳过文件资源管理器回到之前的缓冲区?
解决Vim中
:Explore干扰:b#缓冲区跳转的问题 核心问题
使用:Explore打开文件资源管理器后,执行:b#会切换回资源管理器窗口,而非打开资源管理器之前的目标缓冲区;同时资源管理器不会出现在:ls的缓冲区列表中,属于Vim特殊处理的工具类窗口。
解决方法
方法1:自定义跳转命令,自动跳过资源管理器
在~/.vimrc(Neovim用户为~/.config/nvim/init.vim)中添加以下配置,创建一个能跳过资源管理器的跳转逻辑:
function! s:JumpToPrevNonExplorer() let prev_buf = bufname('#') # 循环跳过netrw(默认资源管理器)及无效缓冲区 while prev_buf == '' || getbufvar(prev_buf, '&filetype') == 'netrw' let prev_buf = bufname('#' . prev_buf) endwhile execute 'b' . prev_buf endfunction # 映射为快捷键,这里用<Leader>b#,可根据习惯修改 nnoremap <silent> <Leader>b# :call s:JumpToPrevNonExplorer()<CR>
配置完成后,按下<Leader>b#就能直接跳转到打开资源管理器之前的缓冲区,自动跳过资源管理器窗口。
方法2:修改:Explore行为,不干扰缓冲区跳转历史
通过keepalt命令让:Explore执行时不更新上一个缓冲区的记录,添加以下映射:
nnoremap <silent> :Explore :execute 'keepalt Explore'<CR>
之后再用:Explore打开资源管理器时,:b#会直接指向打开资源管理器之前的缓冲区,不会再跳回资源管理器。
关于资源管理器窗口的特殊说明
Vim默认的资源管理器netrw属于特殊工具缓冲区,不会出现在:ls的常规缓冲区列表中。Vim对这类窗口做了特殊处理,默认情况下它仍会占用缓冲区跳转的#标识,但可以通过上述配置规避这个行为。
内容的提问来源于stack exchange,提问作者hugogogo
相关产品推荐
相关产品推荐

