Kopiowanie vimów z zachowaniem położenia kursora

1

Chciałbym mieć skrót w vimie, który wykonuje duplikację linii, bez zmiany pozycji kursora. Po prostu szarpanie i wklejanie zawsze przesuwa kursor na początek następnego wiersza, więc myślę, że muszę to zrobić w dwóch krokach: skopiowanie początku wiersza, a następnie jego końca. Próbowałem tego:

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

z hjklmapowaniem do jklé. (bez remapping to wyglądać tak: y0O<ESC>pjly$kgp`[).

Nie wydaje się to jednak działać jako polecenie, chociaż kiedy testuję to klucz po kluczu, to dobrze się spisuje. Zastanawiam się, co jest nie tak z tym makro?

Adam Hunyadi
źródło

Odpowiedzi:

2

Widzę jeden problem, który noremapodwzorowuje wartość lewej strony na wartość prawej strony bez ponownego mapowania . Zasadniczo prawa strona jest zawsze uważana za po prostu wbudowane odwzorowanie.

Możesz użyć mapzamiast noremaplub możesz użyć oryginalnych mapowań po lewej stronie. Wydaje mi się, że to działa dobrze:

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

Nawiasem mówiąc, oto jak powielam linie, abyś mógł pomyśleć o innym podejściu:

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

Kroki powielania to:

  • Zapisz bieżącą pozycję w zznaku za pomocąmz
  • Skopiuj wiersz do yrejestru za pomocą"yyy
  • Wklej linię powyżej za pomocą "yP
  • Przejdź do pierwotnej pozycji za pomocą `z

Dla mnie to utrzymuje pozycję kursora we właściwym miejscu.

Andrew Radev
źródło