Come faccio a spostare il cursore al centro della riga corrente?


17

C'è un modo in cui posso spostare il cursore al centro della riga corrente? (al centro della riga di testo - non al centro della larghezza dello schermo)

Mi chiedevo se esistesse una scorciatoia simile a Mquella che sposta il cursore al centro dello schermo.

EDIT : aggiunto chiarimento tra parentesi


2
Quindi la metà centrale della linea intera o la metà della larghezza dello schermo?
Muru,

@muru Stava pensando a metà della linea completa
thameera l'

2
Potresti aggiungerlo anche alla domanda? E cosa ti aspetti che accada con il wrapping?
Muru,

Risposte:


16

Non conosco alcun modo integrato per farlo, tuttavia, puoi facilmente avere una mappa per farlo:

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

@Ingo Karkat ha proposto la seguente variante che funziona anche in modalità VISUAL.

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

Sfortunatamente, è anche attivato in modalità SELECT. Di conseguenza, preferisco la coppia:

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

3
Questa variante funzionerà correttamente anche per la modalità visiva:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat,

15

Il built-in gmfa esattamente questo.


7
Si noti che questo ti porta al centro della linea rispetto alla larghezza della console , non rispetto alla lunghezza della linea . Quindi, se hai una riga di 10 caratteri e una console di 80 caratteri di larghezza, il cursore si posizionerà sul decimo carattere della riga (perché "cerca" di arrivare al 40 °), non al 5 °.
apnorton,

3
Sì. Dalla domanda, non è chiaro se stiamo cercando il centro della linea o il centro dello schermo. Sulla base dell'analogia con M, ho assunto lo schermo.
martedì

1
In realtà l'ho appena provato su un ampio schermo (circa 180 caratteri) con testo da 80 caratteri. Il cursore è andato alla fine della linea. Non sembra un comando molto utile.
Ben

@Ben È andato alla fine della linea o si è avvicinato il più possibile al centro della larghezza dello schermo? Provalo con una linea più larga del 50% rispetto allo schermo o provalo con :set virtualedit=all.
8

Sì, ma l'OP stava chiedendo un comando per saltare al centro del testo della riga, non al centro dello schermo. Quindi non risponde alla domanda.
Ben

3

Per aggiungere alla risposta di Luc, c'è anche il plug-in Easymotion , che rende semplice spostarsi rapidamente in una posizione specifica. Premere <Leader><Leader>wper evidenziare quale tasto è possibile premere per passare a una parola specifica. In questo modo potresti passare facilmente a una parola nel mezzo della riga corrente.


1

Se vuoi andare al centro del testo (non tenendo conto dello spazio bianco all'inizio della riga), funzionerà:

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>

Non penso che funzionerà in modalità visiva, tuttavia.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.