Vim Kopie, wobei die Position des Cursors beibehalten wird

351
Adam Hunyadi

Ich möchte eine Verknüpfung in vim haben, die eine Zeilenvervielfältigung durchführt, ohne die Cursorposition zu beeinträchtigen. Durch einfaches Ziehen und Einfügen wird der Cursor immer an den Anfang der nächsten Zeile bewegt. Daher denke ich, dass ich dies in zwei Schritten tun muss: Kopieren des Zeilenanfangs und dann des Zeilenendes. Was ich versucht habe, ist folgendes:

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

mit neu hjklzugeordnet zu jklé. (Ohne Neuzuordnung würde es so aussehen:. y0O<ESC>pjly$kgp`[)

Dies scheint jedoch nicht als Befehl zu funktionieren, auch wenn ich ihn Schlüssel für Schlüssel teste, ist er gut geeignet. Ich frage mich, was ist mit diesem Makro falsch?

1

1 Antwort auf die Frage

2
Andrew Radev

Ein Problem, das ich sehe, ist, dass noremapder Wert der linken Seite dem Wert der rechten Seite zugeordnet wird, ohne dass eine Neuzuordnung erfolgt . Grundsätzlich wird die rechte Seite immer nur als eingebaute Mappings betrachtet.

Sie können mapanstelle von noremapoder die ursprünglichen Zuordnungen auf der linken Seite verwenden. Das scheint gut für mich zu funktionieren:

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

Übrigens, ich dupliziere Zeilen, nur damit Sie einen anderen Ansatz haben, um darüber nachzudenken:

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

Die Schritte zum Duplizieren sind:

  • Speichern Sie die aktuelle Position in der zMarke mitmz
  • Zeile in das yRegister kopieren mit"yyy
  • Zeile oben mit einfügen "yP
  • Mit zur ursprünglichen Position gehen `z

Für mich bleibt die Cursorposition an der richtigen Stelle.