Попробуйте следующую функцию обхода списка переходов. Это последовательно выходит из
одно местоположение списка переходов в другое (используя Ctrl + O или
Ctrl + I в зависимости от того, какие значения его back
и forw
аргументы имеют) и останавливается, если текущее местоположение находится в том же буфере, что и
тот буфер, с которого он начал. Если не удается найти список переходов
расположение, относящееся к буферу, функция возвращает в положение,
список переходов есть до начала.
function! JumpInFile(back, forw)
let [n, i] = [bufnr('%'), 1]
let p = [n] + getpos('.')[1:]
sil! exe 'norm!1' . a:forw
while 1
let p1 = [bufnr('%')] + getpos('.')[1:]
if n == p1[0] | break | endif
if p == p1
sil! exe 'norm!' . (i-1) . a:back
break
endif
let [p, i] = [p1, i+1]
sil! exe 'norm!1' . a:forw
endwhile
endfunction
Чтобы использовать эту функцию как
a Ctrl + O / Ctrl + I - замена заблокирована
в текущий буфер создайте отображения, как показано ниже.
nnoremap <silent> <c-k> :call JumpInFile("\<c-i>", "\<c-o>")<cr>
nnoremap <silent> <c-j> :call JumpInFile("\<c-o>", "\<c-i>")<cr>