我是一个 vim 新手,但我很难找到资源来帮助我解决这个问题。
当我将光标移动到文件底部时,我希望它继续越过最后一行,最好直到最后一行位于窗口顶部,但无限期也可以。我当前的解决方案包括输入set scrolloff=20
my~/.vimrc
然后执行G
+zz
来了解底部。但是,如果我向上和向下滚动,我就会再次将最后一行粘贴到底部。
我明白,因为文件后面没有换行符,所以它实际上没有任何可滚动的内容,但尽管如此,我无法使用窗口中间的底线来编辑文件,这很烦人。
所以最终我希望当我在底线时我可以按住它j
,它就会向下滚动。有没有办法做到这一点?
答案1
我不认为这种行为有内置选项,但是在配置中使用一些键绑定,您可以将光标所在的行永久保留在中间(文件的前几行除外):
set scrolloff=99999
nnoremap <C-U> 11kzz
nnoremap <C-D> 11jzz
nnoremap j jzz
nnoremap k kzz
nnoremap # #zz
nnoremap * *zz
nnoremap n nzz
nnoremap N Nzz
nnoremap gg ggzz
nnoremap G Gzz
nnoremap gj gjzz
nnoremap gk gkzz
zz
这映射了要在当前行之后执行并将屏幕居中的常见动作。请注意,这可能会导致速度较慢的终端(例如通过 ssh)闪烁,因为屏幕位置在再次居中之前实际上会跳回来。
答案2
答案3
我找到了这个脚本https://www.vim.org/scripts/script.php?script_id=1649事实上,这比之前的答案效果更好。由于插入文本似乎会使滚动跳跃。
答案4
您可以在 上使用条件重映射j
。如果您位于文档的最后一行,则映射j
到<C-e>
.如果您在任何其他线路地图j
上j
.
nnoremap <expr> j line(".") == line('$') ? '<C-e>':'j'
line(".") 返回当前行号,line("$") 返回最后一个行号。