¿Cómo mover la pantalla sin mover el cursor en Vim?

Recientemente descubrí Ctrl+E y Ctrl+Y atajos para Vim que respectivamente mueven la pantalla hacia arriba y hacia abajo con un paso de una línea, sin mover el cursor.

¿Conoce algún comando que deje el cursor donde está pero que mueva la pantalla de modo 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) la cantidad adecuada de veces, pero tener un comando que de alguna manera lo haga directamente sería bueno.

¿Alguna idea?

preguntado el 11 de agosto de 10 a las 10:08

¿No debería estar esta pregunta en la sección Vim? -

14 Respuestas

  • zz - mover la línea actual al centro de la pantalla
    (Cuidado con zz, si tienes bloqueo de mayúsculas en accidentalmente, guardará y saldrá vim!)
  • zt - mover la línea actual a la parte superior de la pantalla
  • zb - mover la línea actual a la parte inferior de la pantalla

respondido 09 nov., 17:13

@HappyGreenKidNaps ¡Mapa que bloquea la tecla de mayúsculas para controlar lo antes posible! - Aaron

Estoy bastante apegado a mi bloqueo de mayúsculas, especialmente al tratar con muchas macros de C, pero tienes otras opciones. Primero, busque una clave no mapeada (busque letras en ambos casos; intente agregar un modificador o líder, usando un símbolo o tecla de función, etc.) y asignela a la combinación 'arriesgada' sensible a mayúsculas y minúsculas. En segundo lugar, configure vimundo a su gusto para que pueda recuperarse de un error. (Hacks no portátiles entrantes :) En tercer lugar, haga lo mismo pero desde la configuración de su teclado de usuario, por ejemplo, la tecla de Windows + Z; para mapas a secuencias, intente xdotool or triggerhappy. Finalmente, muestre su estado de bloqueo de mayúsculas (no se puede hacer en Vimscript.) ... - John P

Consultar su estado de bloqueo de mayúsculas depende en gran medida del entorno. Escuché que no se puede hacer en Vimscript, y en este momento lo acepté. Si quieres ir por ese camino, hay xev -q, cat /proc/bus/input/devices para encontrar el dispositivo para consultar y evtest or thd ... --dump /dev/input/event<#> para verificar el estado, etc. Si es absolutamente necesario hacer una reasignación de todo el sistema, al menos intercambie dos bloqueos como mayúsculas <--> num, pero el problema es más olvidar que está activado, porque si lo deseaba antes, Lo seguiré usando, sea cual sea el mapa. Riesgo de romper Vim antes que archivos / usuario / sistema. - John P

zt / zz / zb - cursor fijo y mover la pantalla a top / center (alemán: 'zentrum ') / bottom <---> H / M / L - pantalla fija y mover el cursor a HIG H / Minactivo / Luu posición - Eli

yo prefiero z. a zz solo en caso de que tenga el bloqueo de mayúsculas activado, zz no será tan amigable. - antonio awuley

Adicionalmente:

  • Ctrl-y Mueve la pantalla una línea hacia arriba
  • Ctrl-e Mueve la pantalla una línea hacia abajo
  • 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 una página hacia arriba, 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 sólo cambie la posición del cursor si fuera a moverlo fuera de la pantalla.

Cortesía http://www.lagmonster.org/docs/vi2.html

Respondido el 08 de diciembre de 16 a las 23:12

@ulidtko: efter (después en sueco), yore (es decir, el pasado), arriba, abajo, atrás, adelante. (Las palabras atrás y adelante son más largas que arriba y abajo, por lo que, naturalmente, mueven la pantalla una distancia más larga;) - Moberg

Supongo que ayer, como ayer sería una mejor mnemotécnica ^^ - Moberg

Tanto Ctrl-u como Ctrl-d mueven el cursor: "El cursor se mueve el mismo número de líneas hacia arriba en el archivo (si es posible; cuando las líneas se ajustan y cuando llegan al final del archivo, puede haber una diferencia)."- lex r

Gracias @LexR, he actualizado la respuesta para reflejar esa distinción. - pablo rueda

:help CTRL-E dice Mnemonic: Extra lines. - Niko Bellic

Vim requiere que el cursor esté en la pantalla actual en todo momento, sin embargo, puede marcar la posición actual, desplazarse y luego regresar a donde estaba.

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g

Respondido 11 ago 10, 14:08

tenga en cuenta que si solo le importa ir a la línea marcada, puede usar 'g - matt briggs

"Vim requiere que el cursor esté en la pantalla actual en todo momento" A los usuarios de Vim les gusta presumir de que todo es configurable en vim. Este no lo es. No quiero que mi cursor se mueva mientras me desplazo por el archivo. Dealbreaker para mí - Gadelat

Nunca he tenido una situación en la que quisiera que el cursor estuviera en un lugar donde no pudieras verlo. Claro, el cursor se mueve cuando se desplaza, pero puede volver a donde estaba trivialmente (para que pueda ver dónde estaba realmente, no solo una especie de conjetura). Doble tic al revés para uno, Ctrl-O para otra realmente genial, y "tilde atrasado, punto" te devuelve al lugar donde estabas editando por última vez. - dash-tom-bang

@gedalat, es muy molesto en otros editores cuando te desplazas, ya no sabes dónde está tu cursor y tienes que usar el mouse para hacer clic en algún lugar para poder recuperar el cursor. O cree que está "aquí", comience a escribir y, de repente, salta de nuevo a donde estaba el cursor, momento en el que no puede volver al lugar donde se había desplazado, porque solo se rastrean las posiciones del cursor. Hacer que el cursor siga a donde usted va es posiblemente algo bueno. - Shahbaz

Es configurable, @gadelat. Solo necesita mapear esta misma respuesta (marque la posición con mg, desplazarse, ir a la marca con 'g y ya está. Ahora puede invocar la tecla configurable para dar la vuelta y se sentirá como si el cursor nunca abandonara la posición actual. ¡Voilá! - DrBeco

Aquí está mi solución en vimrc:

"keep cursor in the middle all the time :)
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>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza

De modo que el cursor permanecerá en el medio de la pantalla y la pantalla se moverá hacia arriba o hacia abajo.

respondido 23 nov., 19:19

Creo que esta solución es más lo que necesitaba el OP. Lo apliqué y funciona como un encanto. - Gustavo Pinsard

¿Qué tal si configuramos 'scrolloff' a la mitad del valor de 'lines'? - rld.

desafortunadamente "nnoremap oo zza "pierde la sangría automática, pero esto soluciona agregando y eliminando un carácter temporal '.' "nnoremap o o. zzxa "- Neil McGill

Para dejar el cursor en la misma columna cuando usa Ctrl+D, Ctrl+F, Ctrl+B, Ctrl+U, G, H, M, L, gg

debe definir la siguiente opción:

:set nostartofline

Respondido 18 Feb 16, 08:02

Lo olvido / lo confundo cada vez: zt / zz / zb - cursor fijo y mover la pantalla a top / center (alemán: 'zentrum ') / bottom <---> H / M / L - pantalla fija y mover el cursor a HIG H / Minactivo / Luu posición - Eli

Me sorprende que nadie esté usando el Scrolloff opción que mantiene el cursor en el medio de la página. Pruébelo con:

:set so=999

Es el primer método recomendado en la wiki de Vim y funciona bien.

respondido 23 nov., 19:19

Y si no quieres que el cursor siempre esté Derecho en el medio, puede establecerlo en un valor menor. Por ejemplo, :set scrolloff=4 requerirá que el cursor esté siempre al menos a 4 líneas de la parte superior o inferior de la ventana, por lo que siempre tendrá al menos un poco de contexto. - Soren Björnstad

He usado estos atajos en el pasado (Nota: separado pulsaciones de teclas, es decir, toque z, suelte, toque la tecla siguiente):

z entrar -> mueve la línea actual a la parte superior de la pantalla

z . -> mueve la línea actual al centro de la pantalla

z - -> mueve la línea actual a la parte inferior

Si no es obvio:

entrar significa el Regreso or Enviar clave.

. significa la tecla DOT o "punto final" (.).

- significa la tecla GUIÓN (-)

Por lo que vale, z. evita el peligro de guardar y cerrar Vi escribiendo accidentalmente ZZ si el bloqueo de mayúsculas está activado.

Respondido 07 Abr '20, 20:04

estos son geniales, z luego t es un poco exagerado 🤸‍♂️ para mis pequeños muñones - parche

mi mnemotécnico para desplazarse ...

Agregando a otras respuestas también preste atención a ze y zs, lo que significa: mover la pantalla a la izquierda / derecha del cursor (sin mover el cursor)

+-------------------------------+
^                               |
|c-e (keep cursor)              |
|H(igh)             zt (top)    |
|                   ^           |
|           ze      |      zs   |
|M(iddle)  zh/zH <--zz--> zl/zL |
|                   |           |
|                   v           |
|L(ow)              zb (bottom) |
|c-y (keep cursor)              |
v                               |
+-------------------------------+

también mira la posición de h y l y t y b y (con teclado qwertz) c-e y c-y (también la "y" apunta de alguna manera a la parte inferior) en el teclado para recordar dónde se mueve la pantalla.

respondido 10 mar '20, 07:03

Puede prefijar los comandos de movimiento del cursor con un número y eso repetirá ese comando tantas veces

10Ctrl+E hará Ctrl+E 10 veces en lugar de una.

contestado el 08 de mayo de 17 a las 12:05

zEnviar hace exactamente lo que pide esta pregunta.

Funciona donde extrañamente zz no funcionaría (vim 7.4.1689 en Ubuntu 2016.04 LTS sin .vimrc especial)

Respondido 09 ago 17, 09:08

Puede encontrar respuestas a "Desplazamiento de Vim relativo al cursor, mapeo personalizado" útil.

Puede usar el ScrollToPercent(0) de esa pregunta para hacer esto.

respondido 23 nov., 19:19

De hecho, buena función. Gracias. - ereOn

Ingrese vim y escriba:

:help z

z es el comando vim para redibujar, por lo que redibujará el archivo en relación con donde coloque el cursor. Las opciones que tiene son las siguientes:

z+ - Vuelve a dibujar el archivo con el cursor en parte superior de la ventana y al principio un carácter no en blanco de su línea.

z- - Vuelve a dibujar el archivo con el cursor en fondo de la ventana y al principio un carácter no en blanco de su línea.

z. - Vuelve a dibujar el archivo con el cursor en centro de la ventana y al principio un carácter no en blanco de su línea.

zt - Vuelve a dibujar el archivo con el cursor en parte superior de la ventana.

zb - Vuelve a dibujar el archivo con el cursor en fondo de la ventana.

zz - Vuelve a dibujar el archivo con el cursor en centro de la ventana.

respondido 10 mar '20, 10:03

A veces es útil desplazar el texto con el K y J teclas, por lo que tengo esta función de "modo de desplazamiento" en mi .vimrc (también vinculada a zs).

Vea scroll_mode.vim.

Respondido el 20 de junio de 20 a las 10:06

Escribí un plugin lo que me permite navegar por el archivo 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 abortarlo y no moverse en absoluto.

También es fácil cambiar rápidamente entre el cursor en la primera línea, la última línea y el cursor en el medio con solo hacer clic j, k or l cuando estás en el modo del complemento.

Supongo que encajaría bien aquí.

respondido 23 nov., 19:19

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.