受到https://stackoverflow.com/a/18466534/42580的启发,我将其插入.vimrc
nmap <F2> :windo set invscrollbind<cr>
点击<F2>
成功切换所有窗口上的滚动条。 但是我想要了解一些奇怪的事情:
答案 0 :(得分:1)
我知道这篇文章不是答案,但也许可以解决你的问题:这个函数打开窗口同步,如diff
,但没有着色:
let s:sync_win = 0
function SyncWin()
let nr = winnr()
let s:sync_win = 1 - s:sync_win
if ! s:sync_win
windo set noscrollbind nocursorbind
exe nr . 'wincmd w'
return
endif
windo set scrollbind cursorbind nowrap
exe nr . 'wincmd w'
syncbind
set scrollopt+=hor
endfunction
编辑:对不起简短描述,但我没有时间。
要使用该功能将其放在.vimrc
的末尾,请在两个分割中打开要比较的文件,然后:
:call SynWin()
要关闭同步,请再次调用。
答案 1 :(得分:1)
你无法重现的第二个问题。
您的第一个问题是因为您使用了windo
,windo
会遍历所有窗口并执行命令,最后将焦点放在最后一个窗口上。您可以做的是在完成windo
后移至上一个窗口。这张<expr>
地图可以提供帮助:
nnoremap <expr> <F2> ":windo set invscrollbind\<cr>:".winnr()."wincmd w\<cr>"
答案 2 :(得分:0)
回答2
我在.vimrc
中使用this tip来阻止窗口在缓冲区之间切换时上下跳跃。但这确实与滚动绑定发生冲突。我重命名了var然后没有问题:
au BufLeave * if !&diff | let b:URwinview = winsaveview() | endif
au BufEnter * if exists('b:URwinview') && !&diff | call winrestview(b:URwinview) | unlet! b:URwinview | endif