¿Cómo muevo el cursor al centro de la línea actual?

17

¿Hay alguna forma de mover el cursor al centro de la línea actual? (el centro de la línea de texto, no el centro del ancho de la pantalla)

Me preguntaba si había un atajo similar al Mque mueve el cursor al centro de la pantalla.

EDITAR : aclaración agregada entre paréntesis

thameera
fuente
2
Entonces, ¿es el medio medio de la línea completa o el medio del ancho de la pantalla?
Muru
@muru estaba pensando en el medio de la línea completa
thameera
2
¿Podría agregar eso a la pregunta también? ¿Y qué esperas que pase con el envoltorio?
Muru

Respuestas:

16

No conozco ninguna forma integrada de hacer esto, sin embargo, puede tener fácilmente un mapa para hacerlo:

nnoremap µ :exe 'normal! '.(virtcol('$')/2).'\|'<cr>

@Ingo Karkat propuso la siguiente variante que también funciona en modo VISUAL.

noremap <expr> gM (virtcol('$') / 2) . '<Bar>'

Desafortunadamente, también se activa en el modo SELECCIONAR. Como consecuencia, prefiero la pareja:

nnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
xnoremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Luc Hermitte
fuente
3
Esta variante también funcionará correctamente para el modo visual:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat
15

El incorporado gmhace exactamente esto.

tommcdo
fuente
77
Tenga en cuenta que esto lo lleva al centro de la línea con respecto al ancho de la consola , no con respecto a la longitud de la línea . Entonces, si tiene una línea de 10 caracteres y una consola que tiene 80 caracteres de ancho, el cursor terminará en el décimo carácter de la línea (porque está "tratando" de llegar al 40), no el quinto.
apnorton
3
Sí. De la pregunta, no está claro si estamos buscando el medio de la línea o el medio de la pantalla. Basado en la analogía a M, asumí la pantalla.
tommcdo
1
En realidad, acabo de probar esto en una pantalla ancha (aproximadamente 180 caracteres) con texto de 80 caracteres. El cursor fue al final de la línea. No parece un comando muy útil.
Ben
@Ben ¿Se fue al final de la línea o se acercó lo más posible al centro del ancho de la pantalla? Pruébelo con una línea que sea más del 50% del ancho de la pantalla, o inténtelo con :set virtualedit=all.
8bittree
Sí, pero el OP estaba pidiendo un comando para saltar a la mitad del texto de la línea, no a la mitad de la pantalla. Entonces no responde la pregunta.
Ben
3

Para agregar a la respuesta de Luc, también está el complemento Easymotion , que hace que moverse rápidamente a una posición específica sea muy fácil. Al presionar <Leader><Leader>wse resaltará la tecla que puede presionar para pasar a una palabra específica. De esa manera, podría pasar fácilmente a una palabra en el medio de la línea actual.

daanavitch
fuente
1

Si desea ir al medio del texto (sin tener en cuenta el espacio en blanco al comienzo de la línea), esto funcionará:

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>

Sin embargo, no creo que esto funcione en modo visual.

usuario11824
fuente