据我所知,ctrl-d和ctrl-u根据scroll选项中设置的行数滚动窗口,默认为窗口高度的一半。可以将其更改为滚动窗口高度的三分之一吗?
ctrl-d
ctrl-u
scroll
5lhxktic1#
scroll的默认值是动态的-在一个窗口中可以是12,在另一个窗口中可以是21-但比例50%是硬编码的。AFAIK,用于动态计算scroll的比例不能修改。你可以很容易地改变scroll的值,如下所示:
12
21
50%
execute "set scroll=" . winheight('.') / 3
现在,您必须找到如何、何时以及在何处使用该片段。一个autocmd似乎是一个很好的选择,但我们应该使用什么事件?WinEnter / WinLeave?CursorMove?还有别的吗?也许是一个简单的Map,覆盖默认值?例如:
autocmd
WinEnter
WinLeave
CursorMove
nnoremap <C-d> :execute "normal! " . winheight('.') / 3 . "^D"<CR> " type <C-v> then <C-d> to produce ^D
kulphzqa2#
使用ex命令。它使用变量lines来显示窗口中显示了多少行,并计算第三行。
lines
:execute "set scroll=" .&lines / 3
EDIT:当窗口调整大小时,滚动值不会改变,所以在vimrc中添加以下自动命令来修复它:
vimrc
:au VimResized * execute "set scroll=" . &lines / 3
e4eetjau3#
解决方案是将scroll的值设置为~/.vimrc中窗口高度的三分之一。但是,使用set scroll=<value>这样做的问题是scroll的值被重置为0,即当当前窗口大小发生变化时,例如,当使用:h <topic>访问内置帮助或使用q/浏览搜索历史记录时,将窗口高度设置为窗口高度的一半。请参阅:h scroll了解更多详细信息。要在所有窗口中以及所有窗口大小更改后保留scroll设置,您可以将此vimscript代码添加到~/.vimrc:
~/.vimrc
set scroll=<value>
0
:h <topic>
q/
:h scroll
set scroll=float2nr(winheight('.') / 3) function! PreserveScroll(timer) set scroll=float2nr(winheight('.') / 3) endfunction augroup vimrc-preserve-scroll autocmd! autocmd VimResized * set scroll=float2nr(winheight('.') / 3) autocmd WinEnter * set scroll=float2nr(winheight('.') / 3) autocmd WinLeave * call timer_start(300, "PreserveScroll", {"repeat": 3}) augroup END
显然,设置一个计时器并不是最好的解决方案,但不幸的是,我没有看到更好的方法来让所需的set scroll=<value>在返回到一个窗口时执行,例如在关闭帮助窗口后。下面是同一vimscript代码的一个稍微改进的版本,在这个意义上,将scroll值的计算和赋值保持在一个地方:
function! PreserveScroll(timer = v:null) set scroll=float2nr(winheight('.') / 3) endfunction augroup vimrc-preserve-scroll autocmd! autocmd VimResized * call PreserveScroll() autocmd WinEnter * call PreserveScroll() autocmd WinLeave * call timer_start(300, "PreserveScroll", {"repeat": 3}) augroup END call PreserveScroll()
这个版本的代码可能比原始版本的效率低了一点点,因为它不可避免地消耗了一些额外的CPU周期,但这是一个完全可以接受的权衡,因为没有重复的代码。我在~/.vimrc中使用了vimscript代码的改进版本,但修改后将scroll的值设置为窗口的一个完整高度。
3条答案
按热度按时间5lhxktic1#
scroll
的默认值是动态的-在一个窗口中可以是12
,在另一个窗口中可以是21
-但比例50%
是硬编码的。AFAIK,用于动态计算scroll
的比例不能修改。你可以很容易地改变
scroll
的值,如下所示:现在,您必须找到如何、何时以及在何处使用该片段。一个
autocmd
似乎是一个很好的选择,但我们应该使用什么事件?WinEnter
/WinLeave
?CursorMove
?还有别的吗?也许是一个简单的Map,覆盖默认值?例如:
kulphzqa2#
使用ex命令。它使用变量
lines
来显示窗口中显示了多少行,并计算第三行。EDIT:当窗口调整大小时,滚动值不会改变,所以在
vimrc
中添加以下自动命令来修复它:e4eetjau3#
解决方案是将
scroll
的值设置为~/.vimrc
中窗口高度的三分之一。但是,使用set scroll=<value>
这样做的问题是scroll
的值被重置为0
,即当当前窗口大小发生变化时,例如,当使用:h <topic>
访问内置帮助或使用q/
浏览搜索历史记录时,将窗口高度设置为窗口高度的一半。请参阅:h scroll
了解更多详细信息。要在所有窗口中以及所有窗口大小更改后保留
scroll
设置,您可以将此vimscript代码添加到~/.vimrc
:显然,设置一个计时器并不是最好的解决方案,但不幸的是,我没有看到更好的方法来让所需的
set scroll=<value>
在返回到一个窗口时执行,例如在关闭帮助窗口后。下面是同一vimscript代码的一个稍微改进的版本,在这个意义上,将
scroll
值的计算和赋值保持在一个地方:这个版本的代码可能比原始版本的效率低了一点点,因为它不可避免地消耗了一些额外的CPU周期,但这是一个完全可以接受的权衡,因为没有重复的代码。
我在
~/.vimrc
中使用了vimscript代码的改进版本,但修改后将scroll
的值设置为窗口的一个完整高度。