Costumo achar que rolar uma página inteira é muito desorientador, meia página a mais, mas um quarto de página é o ideal. Atualmente, faço isso apenas pressionando as teclas de seta.
Como rolar 25% da página para baixo e para cima com facilidade?
Costumo achar que rolar uma página inteira é muito desorientador, meia página a mais, mas um quarto de página é o ideal. Atualmente, faço isso apenas pressionando as teclas de seta.
Como rolar 25% da página para baixo e para cima com facilidade?
Respostas:
Talvez ctrlde ctrlupossa ser o que você está procurando. Por padrão, eles movem metade da tela.
De :h CTRL-D
:
Janela de rolagem para baixo no buffer. O número de linhas vem da opção 'rolagem' (padrão: meia tela).
Se [contagem] for dada, primeiro defina a opção 'rolagem' para [contagem].
O que significa que na primeira vez em que você deseja rolar em uma janela, você pode fazer XXctrldonde XX seja 25% do número de linhas na sua janela. Conforme definido scroll
no valor XX, você pode usar ctrlde ctrlumover 25% da tela.
Além disso, acho que isso :h scrolling
pode ser interessante para você.
Editar
E aqui está outra solução com uma função e alguns mapeamentos para adicionar ao seu .vimrc
:
function! ScrollQuarter(move)
let height=winheight(0)
if a:move == 'up'
let key="\<C-Y>"
else
let key="\<C-E>"
endif
execute 'normal! ' . height/4 . key
endfunction
nnoremap <silent> <up> :call ScrollQuarter('up')<CR>
nnoremap <silent> <down> :call ScrollQuarter('down')<CR>
A função obterá a altura da janela atual e, de acordo com seu parâmetro, rolará a tela para cima ou para baixo em um quarto da altura.
Os mapeamentos chamarão a função, o primeiro a subir e o segundo a descer.
Obviamente, você pode alterar <up>
e <down>
para outras teclas se quiser manter o comportamento padrão das teclas de seta.
ctrl-E
e ctrl-Y
nos mapeamentos, porque a). você terá atalhos separados para rolagem de 1/2 e 1/4 de página. b) o comportamento de ctrl-U
/ ctrl-D
é consistente e não depende de você ter usado o mapeamento anteriormente.
let key="^U"
a parte entre aspas duplas representa o código-chave de ctrl+u
. Portanto, se você copiou a função no vim, coloque o cursor no primeiro hit de aspas duplas ci"
para modificar o conteúdo das aspas e, em seguida, aperte ctrl+v
seguido pelo ctrl+u
mesmo na linha let key="^D"
.
let key="^Y"
vez de let key="^U"
. Ele criará o mesmo comportamento, mas sem afetar a 'scroll'
configuração.
Você pode usar ctrlee ctrlymover a página uma linha para cima e para baixo.
Então, se você deseja 20ctrlemover +/- 25%, pode usar e isso moverá você 20 linhas para baixo.
Aqui também está uma boa pergunta explicada, semelhante à sua: /programming/3458689/how-to-move-screen-without-moving-cursor-in-vim
Eu variei a abordagem statox para que ela role mais consistente ao longo das linhas de linha. Se você deseja um quarto de passo, altere 0,618 para 0,25 ou o que for.
function! ScrollGolden(move)
let height=winheight(0)
if a:move == 'up'
let prep='L'
" let key="^Y"
let key='gk'
let post='zb'
elseif a:move == 'down'
let prep='H'
" let key="^E"
let key='gj'
let post='zt'
endif
execute 'normal! ' . prep . float2nr(round(height*0.618)) . key . post
endfunction
nnoremap <silent> <BS> :call ScrollGolden('up')<CR>
nnoremap <silent> <Space> :call ScrollGolden('down')<CR>
Se você deseja uma boa resposta geral e não exatamente 25%, você pode fatorar a contagem normal de linhas em uma página, dividir por 25 e definir alguns mapeamentos do sistema. Por exemplo, se você normalmente possui cerca de 100 linhas em uma tela de cada vez, então 25% delas são 25 linhas, para que você possa definir um mapeamento de teclas como algo como J e K maiúsculas para subir e descer rapidamente 25 linhas
noremap J 25j
noremap K 25k
Se você quiser pular para a marca de um quarto do arquivo inteiro, digite no modo normal:
25%
noremap J 25j
codifica o valor 25
assim, quando, por exemplo, você divide horizontalmente uma janela de 100 linhas, seu mapeamento realmente navegará em 50% das novas janelas. Sobre a sua segunda opção, :25%
eu não sabia que existia, mas pelos meus testes parece que ele coloca o cursor em uma posição com base na primeira linha: se eu tenho um buffer de 100 linhas e quero avançar 25%, a digitação :25%
me trará na linha 25, não importa onde estava meu cursor. Além disso, você poderia colocar o tópico de ajuda que descreve esse recurso que não consigo encontrar no documento?