diff --git a/vimrc b/vimrc index e23d07f..085a95e 100644 --- a/vimrc +++ b/vimrc @@ -67,6 +67,7 @@ let g:netrw_altv = 1 augroup vimrc_netrw autocmd! + autocmd FileType netrw setlocal nobuflisted autocmd FileType netrw nnoremap :wincmd l autocmd FileType netrw nnoremap :wincmd h autocmd FileType netrw nnoremap :wincmd j @@ -191,6 +192,29 @@ function! SafeBdelete() execute 'bdelete ' . l:buf endfunction +function! ListedFileBuffers() + return filter(range(1, bufnr('$')), 'buflisted(v:val) && getbufvar(v:val, "&filetype") !=# "netrw"') +endfunction + +function! SafeBnext(dir) + let l:buffers = ListedFileBuffers() + if empty(l:buffers) + return + endif + + let l:current = bufnr('%') + let l:index = index(l:buffers, l:current) + if l:index < 0 + let l:index = 0 + elseif a:dir > 0 + let l:index = (l:index + 1) % len(l:buffers) + else + let l:index = (l:index - 1 + len(l:buffers)) % len(l:buffers) + endif + + execute 'buffer ' . l:buffers[l:index] +endfunction + " --- Plugin management --- nnoremap pu :PlugUpdate nnoremap pd :PlugUpgrade @@ -244,8 +268,8 @@ nnoremap ? :History: " --- Buffers --- nnoremap bd :call SafeBdelete() -nnoremap H :bprevious -nnoremap L :bnext +nnoremap H :call SafeBnext(-1) +nnoremap L :call SafeBnext(1) " --- Terminal --- if exists(':terminal') == 2