Cópia do Vim preservando a localização do cursor

1

Eu gostaria de ter um atalho no vim que executa uma duplicação de linha, sem atrapalhar a posição do cursor. Simplesmente puxar e colar sempre move o cursor para o início da próxima linha, então acho que preciso fazer isso em duas etapas: copiar o início da linha e depois o fim da linha. O que eu estava tentando é isso:

noremap <C-S-d> y0O<ESC>pkéy$lgp'[

com hjkl remapeado para jklé . (sem remapear ficaria assim: y0O<ESC>pjly$kgp'[ .)

Isso não parece funcionar como um comando, apesar de quando eu testá-lo chave por chave, mangás muito bem. Eu me pergunto o que está errado com essa macro?

    
por Adam Hunyadi 04.06.2017 / 16:03

1 resposta

2

Um problema que vejo é que noremap mapeia o valor do lado esquerdo para o valor do lado direito sem remapear . Basicamente, o lado direito é sempre considerado apenas como mapeamentos internos.

Você pode usar map em vez de noremap ou pode usar os mapeamentos originais no lado esquerdo. Isso parece funcionar bem para mim:

noremap <C-S-d> y0O<ESC>pjly$kgp'[

Por acaso, aqui está como eu duplico linhas, só assim você pode ter uma abordagem diferente para pensar:

nnoremap zj mz"yyy"yP'z
nnoremap zk mz"yyy"yP'zk

Os passos para a duplicação são:

  • Salve a posição atual na marca z com mz
  • Copie a linha para o y register com "yyy
  • Cole a linha acima com "yP
  • Ir para a posição original com 'z

Para mim, isso mantém a posição do cursor no lugar certo.

    
por 05.06.2017 / 11:04