Como movo o cursor para o centro da linha atual?


17

Existe uma maneira de mover meu cursor para o meio da linha atual? (no meio da linha de texto - não no meio da largura da tela)

Fiquei me perguntando se havia um atalho semelhante ao Mque move o cursor para o meio da tela.

EDIT : Adicionado esclarecimento entre parênteses


2
Então, é meio meio da linha completa ou meio da largura da tela?
Muru

@muru Foi pensando em meados de linha completa
thameera

2
Você poderia adicionar isso à pergunta também? E o que você espera que aconteça com a embalagem?
Muru

Respostas:


16

Não conheço nenhuma maneira embutida de fazer isso, no entanto, você pode facilmente ter um mapa para fazê-lo:

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

A @Ingo Karkat propôs a seguinte variante que também funciona no modo VISUAL.

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

Infelizmente, também é acionado no modo SELECT. Como conseqüência, eu prefiro o casal:

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

3
Esta variante também irá funcionar correctamente para o modo visual:noremap <expr> gM (virtcol('$') / 2) . '<Bar>'
Ingo Karkat

15

O built-in gmfaz exatamente isso.


7
Observe que isso leva você ao meio da linha em relação à largura do console , não em relação ao comprimento da linha . Portanto, se você tiver uma linha de 10 caracteres e um console com 80 caracteres de largura, o cursor terminará no 10º caractere da linha (porque está "tentando" chegar ao 40º), não ao 5º.
apnorton

3
Sim. Da questão, não está claro se estamos procurando o meio da linha ou o meio da tela. Com base na analogia M, assumi a tela.
tommcdo

1
Na verdade, eu tentei isso em uma tela ampla (cerca de 180 caracteres) com texto de 80 caracteres. O cursor foi para o final da linha. Não parece um comando muito útil.
217 Ben

@ Ben Foi para o final da linha ou foi o mais próximo possível do centro da largura da tela? Experimente com uma linha com mais de 50% da largura da tela ou com :set virtualedit=all.
precisa saber é o seguinte

Sim, mas o OP estava pedindo um comando para pular para o meio do texto da linha, não para o meio da tela. Portanto, não responde à pergunta.
Ben

3

Para adicionar à resposta de Luc, também há o plug- in Easymotion , que facilita a mudança rápida para uma posição específica. Pressionar <Leader><Leader>wdestacará a tecla que você pode pressionar para ir para uma palavra específica. Dessa forma, você pode facilmente mudar para uma palavra no meio da linha atual.


1

Se você deseja ir para o meio do texto (sem levar em consideração o espaço em branco no início da linha), isso 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>

Eu não acho que isso funcionará no modo visual, no entanto.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.