Friday, February 26, 2010

Re: Naive question: scrolling down keeping only 1 line

On Fri, Feb 26, 2010 at 5:23 PM, Jean Johner <jean.johner@cea.fr> wrote:
> On Feb 26, 6:58 pm, Ben Fritz <fritzophre...@gmail.com> wrote:
>
>> 2. Re-map CTRL-F/CTRL-B with an :nnoremap command that issues the
>> command, then scrolls by 1 line with CTRL-Y/CTRL-E in the correct
>> direction to get the desired amount of context.
>
> Hi Ben,
> CTRL-F CTRL-E does the job but the transition is visible on a slow
> connection (VPN).
> For CTRL-D, it is more complicated since it depends on the vertical
> dimension of the screen.
>
> It is nevertheless surprising that, in a code where everything can be
> configured, this two lines overlap between screens seems to be set in
> stone.

Perhaps make the map call a function that ensures 'lazyredraw' is set
while scrolling. This seems to do the trick, afaics, and has no
noticeable delay over the slowest connection I can get.

~Matt

function! s:ScrollLeavingOneLineOffset(dir, insert)
let savelz = &lz
set lazyredraw

try
if a:dir > 0 && a:insert
return "\<PageDown>\<C-o>\<C-e>"
elseif a:dir > 0
return "\<PageDown>\<C-e>"
elseif a:insert
return "\<PageUp>\<C-o>\<C-y>"
else
return "\<PageUp>\<C-y>"
endif
finally
let &lz = savelz
endtry
endfunction

noremap <expr> <C-b> <SID>ScrollLeavingOneLineOffset(-1, 0)
noremap <expr> <PageUp> <SID>ScrollLeavingOneLineOffset(-1, 0)
noremap <expr> <C-f> <SID>ScrollLeavingOneLineOffset( 1, 0)
noremap <expr> <PageDown> <SID>ScrollLeavingOneLineOffset( 1, 0)

inoremap <expr> <C-b> <SID>ScrollLeavingOneLineOffset(-1, 1)
inoremap <expr> <PageUp> <SID>ScrollLeavingOneLineOffset(-1, 1)
inoremap <expr> <C-f> <SID>ScrollLeavingOneLineOffset( 1, 1)
inoremap <expr> <PageDown> <SID>ScrollLeavingOneLineOffset( 1, 1)

--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

No comments: