por - ¿Cómo mover la pantalla sin mover el cursor en Vim?
salir de vi linux (10)
A veces es útil desplazar el texto con las teclas K y J. Así que tengo esta función de "modo de desplazamiento" en mi .vimrc (también enlazado en zs)
Recientemente descubrí los atajos Ctrl + E y Ctrl + Y para Vim que mueven respectivamente la pantalla hacia arriba y hacia abajo con un solo paso, sin mover el cursor .
¿Conoces algún comando que deje el cursor donde está pero mueve la pantalla para que la línea que tiene el cursor se convierta en la primera línea? (tener un comando para la última línea sería una buena ventaja).
Puedo lograr esto presionando manualmente Ctrl + E (o Ctrl + Y ) el número correcto de veces, pero tener un comando que de alguna manera lo haga directamente sería bueno.
¿Algunas ideas?
Adicionalmente:
- Ctrl - y Mueve la pantalla hacia arriba una línea
- Ctrl - e Mueve la pantalla hacia abajo una línea
- Ctrl - u Mueve el cursor y la pantalla hacia arriba ½ página
- Ctrl - d Mueve el cursor y la pantalla hacia abajo ½ página
- Ctrl - b Mueve la pantalla hacia arriba una página, el cursor a la última línea
- Ctrl - f Mueve la pantalla hacia abajo una página, el cursor a la primera línea
Ctrl - y y Ctrl - e solo cambian la posición del cursor si se mueve fuera de la pantalla.
Cortesía de http://www.lagmonster.org/docs/vi2.html
Aquí está mi solución en vimrc:
nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zza
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza
De modo que el cursor se mantendrá en el centro de la pantalla, y la pantalla se moverá hacia arriba o hacia abajo.
Hay un nuevo complemento que escribí, que te permite navegar por el archivo del agujero sin mover la posición del cursor. Se basa en doblar las líneas entre su posición y su posición objetivo y luego saltar sobre el pliegue. O abórtalo y no te muevas en absoluto.
También es fácil cambiar rápidamente entre los cursores es la primera línea, el cursor es la última línea y el cursor está en el medio con solo hacer clic en j, k o l (cuando está en el modo del complemento).
Supongo que sería una buena opción aquí: https://github.com/anschnapp/move-less
Para dejar el cursor en la misma columna cuando usa Ctrl + D , Ctrl + F , Ctrl + B , Ctrl + U , G , H , M , L , g g
Debes definir la siguiente opción:
:set nostartofline
Puede encontrar útiles las respuestas a esta pregunta: Desplazar Vim en relación con el cursor, mapeo personalizado : puede usar ScrollToPercent(0)
de esa pregunta para hacer esto.
Puede prefijar los comandos de movimiento del cursor con un número y eso repetirá ese comando muchas veces.
1 0 Ctrl + E hará Ctrl + E 10 veces en lugar de una.
Vim requiere que el cursor esté en la pantalla actual en todo momento, sin embargo, puede marcar la posición actual para desplazarse y regresar a donde estaba.
mg # This book marks the current position as g (this can be any letter)
<scroll around>
`g # return to g
z Enter hace exactamente lo que esta pregunta pide.
Funciona donde, extrañamente, z z no funcionaría (vim 7.4.1689 en Ubuntu 2016.04 LTS sin .vimrc especial)
- z z - mueve la línea actual al centro de la pantalla
( Tenga cuidado con z z , si tiene Caps Lock activado accidentalmente, guardará y saldrá devim
!) - z t - mueve la línea actual a la parte superior de la pantalla
- z b : mueve la línea actual a la parte inferior de la pantalla