Role um quarto (25%) da tela para cima ou para baixo

14

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?

Louis Hong
fonte
1
verifique a função riscada nesta resposta: stackoverflow.com/a/3102890
Sundeep 25/10

Respostas:

19

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 scrollno valor XX, você pode usar ctrlde ctrlumover 25% da tela.

Além disso, acho que isso :h scrollingpode 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.

statox
fonte
2
Parece que pode fazer mais sentido usar ctrl-Ee ctrl-Ynos 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.
Rich
Não entendo sua nota importante. O que você quer dizer com inserir manualmente? Atualmente, o uso exclui uma linha em vez de mover a página.
Louis Hong
@LouisHong Veja a linha na qual 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+vseguido pelo ctrl+umesmo na linha let key="^D".
statox
@ Rich: Sim, esse é um bom argumento. Usei as setas do teclado porque foi o que o OP disse que ele usou, mas o seu ponto é relevante.
Statox
@statox Você me entendeu mal! (Eu não estava claro). Eu quis dizer usar em let key="^Y"vez de let key="^U". Ele criará o mesmo comportamento, mas sem afetar a 'scroll'configuração.
26316 Rich
3

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

A. Dziedziczak
fonte
3

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>
Possum Gallo
fonte
0

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%
Gajit
fonte
1
Eu acho que há duas desvantagens com sua solução: noremap J 25jcodifica o valor 25assim, 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?
statox
1
Encontrei o tópico da ajuda em :h N%:-)
statox