在vim中是否可以循环滚动?

g33*_*z0r 3 vim scroll

是否可以配置vim使得移动命令"环绕"垂直(或水平)缓冲区?

换句话说,假设我在视觉模式下在缓冲区中的第2行.我按3k.我的光标现在位于缓冲区的最后一行.

或者更简单地说,我的光标位于文件的第一行 - 我按下k.现在我的光标翻转到文件的最后一行.

如果之前已经问过这个问题,我很抱歉,但我找不到任何搜索"循环滚动"或"环绕滚动"的引用.

Con*_*ner 5

这也可能是可能与一些Vimscript中两轮牛车,但它更普遍,成为高效与运动喜欢G去一个文件的底部,gg1G<C-Home>转到文件的顶部.同样,$对于行的结尾和行0的开头或^第一个非空白字符.

您还可以设置:help whichwrap,指定在移动到行尾时移动到下一行的键移动到移动到行的开头时移动到上一行.除此之外,我不认为你所要求的内置功能.您可以使用某些vimscript来完成它,但它需要将h,j,k和l重新映射到函数并处理它们是否位于行/文件的结尾/开头.对我来说,这似乎有点过分,而且相当混乱.

所有这一切,如果你必须......

nnoremap j :call CheckJ()<cr>
nnoremap k :call CheckK()<cr>
nnoremap h :call CheckH()<cr>
nnoremap l :call CheckL()<cr>

fun! CheckJ()
   if line('.') == line('$')
      norm! gg
   else
      norm! j
   endif
endfun

fun! CheckK()
   if line('.') == 1
      norm! G
   else
      norm! k
   endif
endfun

fun! CheckH()
   if col('.') == 1
      norm! $
   else
      norm! h
   endif
endfun

fun! CheckL()
   if col('.') == (col('$') - 1)
      norm! 0
   else
      norm! l
   endif
endfun
Run Code Online (Sandbox Code Playgroud)