首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换滚动绑定有奇怪的副作用

切换滚动绑定有奇怪的副作用
EN

Stack Overflow用户
提问于 2014-06-27 11:21:31
回答 3查看 118关注 0票数 0

https://stackoverflow.com/a/18466534/42580的启发下,我把这个插入到我的.vimrc

代码语言:javascript
复制
nmap <F2> :windo set invscrollbind<cr>

点击<F2>成功切换所有窗口上的滚动绑定。,但,有一些奇怪的事情,我想了解一下:

  1. 在打开和关闭焦点时,焦点从当前活动的窗口移动到右下角的窗口。我想让焦点留在这里!
  2. 如果我绑定两个窗口,向下滚动一个屏幕,然后取消绑定(使用),我将不会期望任何视觉变化。但是,非焦点窗口被滚动回绑定之前的位置(一个屏幕向上)。为什么和如何避免这种情况?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-27 12:01:37

你的第二个问题我不能再重复了。

第一个问题是因为您使用了windowindo将遍历所有窗口并执行命令,最后将焦点放在最后一个窗口上。您可以做的是在完成windo之后移动到前面的窗口。

代码语言:javascript
复制
nnoremap  <expr> <F2> ":windo set invscrollbind\<cr>:".winnr()."wincmd w\<cr>"
票数 1
EN

Stack Overflow用户

发布于 2014-06-27 11:42:30

我知道这篇文章不是一个答案,但可能解决了您的问题:这个函数像diff一样打开窗口同步,但没有着色:

代码语言:javascript
复制
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末尾的函数,请打开要将其分为两部分比较的文件,然后:

代码语言:javascript
复制
:call SynWin()

若要关闭同步,请再次调用它。

票数 1
EN

Stack Overflow用户

发布于 2014-06-30 11:02:08

答案2

我在.vimrc中使用了.vimrc,以防止在缓冲区之间切换时窗口上下跳。但这确实与滚动绑定发生了冲突。我重新命名了var,然后就没有问题了:

代码语言:javascript
复制
au BufLeave * if !&diff | let b:URwinview = winsaveview() | endif
au BufEnter * if exists('b:URwinview') && !&diff | call winrestview(b:URwinview) | unlet! b:URwinview | endif
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24450614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档