Vim: Bewegen Sie sich mit relativer number und fügen Sie es zur Sprungliste für die Verwendung von STRG-O hinzu

2

Ich habe die relative Nummer aktiviert und navigiere oft zu einer bestimmten Zeile, indem ich 25k oder 7j usw. drücke. Das Problem ist, dass ich nach dem Ändern der Zeile oft wieder zu dem gehen möchte, wo ich vor dem Umzug war. Also drücke ich STRG-O, aber das schlägt fehl, weil J / K-Bewegungen nicht zur Bewegungshistorie hinzugefügt werden. Stattdessen bewege ich mich zwei Mal zurück.

Ideal wäre es, wenn Vim jedes Mal, wenn ich eine J / K-Operation mit einem Multiplikator durchführe, zur Bewegungshistorie hinzugefügt wird. Ist so etwas möglich?

Steve Vermeulen
quelle

Antworten:

2

Hier ist ein Mapping für j / k das erreicht das:

:nnoremap <silent> k :<C-U>execute 'normal!' (v:count > 1 ? "m'" . v:count : '') . 'k'<CR>
:nnoremap <silent> j :<C-U>execute 'normal!' (v:count > 1 ? "m'" . v:count : '') . 'j'<CR>

Credit: Ich habe das zum ersten Mal gesehen Hier .

Ingo Karkat
quelle
1

Ich glaube nicht, dass Vim eine Möglichkeit bietet, der Jumplist Bewegungen hinzuzufügen, aber wenn Sie wirklich zurückspringen möchten '' und Bewegungen etwas wie Sprünge behandeln, könnten Sie so etwas tun:

function! MarkJ()
    mark '
    return "j"
endfunction

nnoremap <expr> j MarkJ()

MarkJ() setzt manuell das ' markieren, diese Zeile zur Jumplist hinzufügen (immer in Spalte 0) und dann zurückkehren j zum Mapping. Leider müssten Sie für jede Bewegung dasselbe tun.

Ich kann mir keine Möglichkeit vorstellen, dies auf Bewegungen mit Multiplikatoren zu beschränken, aber dem zu folgen getchar() Beispiel unter :help map-exprwäre es theoretisch möglich, eine Menge von Funktionen und Zuordnungen zu definieren, die nur aufgerufen werden MarkX() wenn der Antrag einem Multiplikator folgt. Dies ist jedoch ziemlich gut durchdacht und könnte teuer genug sein, um die Leistung zu beeinträchtigen.

Nikita Kouevda
quelle