Desplazar un cuarto (25%) de la pantalla hacia arriba o hacia abajo

15

A menudo encuentro que desplazar una página completa es demasiado desorientador, media página demasiado, pero un cuarto de página es lo correcto. Actualmente lo hago simplemente presionando las teclas de flecha.

¿Cómo desplazo el 25% de la página hacia arriba y hacia abajo fácilmente?

Louis Hong
fuente
1
verifique la función tachada en esta respuesta: stackoverflow.com/a/3102890
Sundeep

Respuestas:

20

Tal vez ctrldy ctrlupodría ser lo que estás buscando. Por defecto, mueven la mitad de la pantalla.

De :h CTRL-D:

Desplazar la ventana hacia abajo en el búfer. El número de líneas proviene de la opción 'desplazamiento' (predeterminado: media pantalla).

Si se da [cuenta], primero configure la opción 'desplazamiento' en [cuenta].

Lo que significa que la primera vez que desea desplazarse en una ventana puede hacerlo XXctrlddonde XX es el 25% del número de líneas en su ventana. Como se establece scrollen el valor XX, puede usar ctrldy ctrlumover el 25% de la pantalla.

Además, creo que :h scrollingpuede ser interesante para ti.


Editar

Y aquí hay otra solución con una función y algunas asignaciones para agregar a su .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>

La función obtendrá la altura de la ventana actual y, de acuerdo con su parámetro, desplazará la pantalla hacia arriba o hacia abajo un cuarto de la altura.

Las asignaciones llamarán a la función, la primera para subir y la segunda para bajar.

Por supuesto, puede cambiar <up>y <down>algunas otras teclas si desea mantener el comportamiento predeterminado de las teclas de flecha.

statox
fuente
2
Parece que podría tener más sentido usar ctrl-Ey ctrl-Yen las asignaciones, porque a). entonces tiene accesos directos separados para desplazamiento de 1/2 página y 1/4 de página. si). el comportamiento de ctrl-U/ ctrl-Des consistente y no depende de si ha utilizado previamente la asignación.
Rico
No entiendo tu nota importante. ¿Qué quieres decir con ingresar manualmente? Actualmente, usar esto elimina una línea en lugar de mover la página.
Louis Hong
@LouisHong Vea la línea en la que let key="^U"la parte entre comillas dobles representa el código clave de ctrl+u. Entonces, si copió la función en vim, coloque el cursor en el primer hit de comillas dobles ci"para modificar el contenido de las comillas y luego pulse ctrl+vseguido de ctrl+ulo mismo en la línea let key="^D".
statox
@ Rich: Sí, ese es un buen punto. Usé las teclas de flecha porque eso es lo que OP dijo que usó, pero su punto es relevante.
statox
@statox ¡Me entendiste mal! (No estaba claro). Me refería a usar en let key="^Y"lugar de let key="^U". Creará el mismo comportamiento pero sin afectar la 'scroll'configuración.
Rico
3

He variado el enfoque statox para que se desplace de manera más consistente sobre los linewraps. Si desea un cuarto de paso, cambie 0.618 nuevamente a 0.25 o lo que sea.

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
fuente
0

Si desea una buena respuesta general y no un 25% exacto, puede factorizar el recuento normal de líneas en una página dividir por 25 y establecer algunas asignaciones del sistema. Por ejemplo, si normalmente tiene aproximadamente 100 líneas en una pantalla a la vez, el 25% de eso son 25 líneas, por lo que podría establecer una asignación de teclas en algo como su J mayúscula y K para moverse rápidamente hacia arriba y hacia abajo 25 líneas

noremap J 25j
noremap K 25k

Si solo desea saltar al cuarto de marca del archivo completo, en modo normal simplemente escriba:

25%
Gajit
fuente
1
Creo que hay dos inconvenientes con su solución: noremap J 25jcodifica el valor de 25modo que, por ejemplo, cuando divide horizontalmente una ventana de 100 líneas, su mapeo en realidad navegará el 50% de las nuevas ventanas. Sobre su segunda opción :25%, no sabía que existía, pero de mis pruebas parece que coloca el cursor en una posición basada en la primera línea: si tengo un búfer de 100 líneas y quiero avanzar un 25%, escribir :25%me traerá en la línea 25 sin importar dónde estaba mi cursor. También, ¿podría poner el tema de ayuda que describe esta función que no puedo encontrar en el documento?
statox
1
Encontré el tema de ayuda en :h N%:-)
statox