Gehen Sie in vim zur Mitte der Linie

14

Ich weiß, dass 0 an den Anfang der Zeile und $ an das Ende geht, aber gibt es etwas für die Mitte?

teggy
quelle

Antworten:

11
:call cursor(0, len(getline('.'))/2)
kurzlebig
quelle
4
Dies wäre ziemlich nützlich, wenn es zugeordnet wäre, zB :: nnoremap gm: Aufrufcursor (0, len (getline ('.')) / 2) <cr>
Heptite
3
virtcol ('$') / 2 ist genug.
Luc Hermitte
@ Luc Hermitte: Schön, aber nicht gerade das beste Verhalten, wenn es um harte Tabs geht.
Ephemient
Deshalb benutze ich virtcol anstelle von col. :). Aber in der Tat sollten wir | verwenden und nicht cursor (). Übrigens wird len () kein besseres Ergebnis liefern. Darüber hinaus gibt len ​​andere Probleme mit Multi-Byte-Zeichen.
Luc Hermitte
8

Das Tippen gmwürde es tun, aber es bewegt sich durch Bildschirmlinien (siehe :help gm). Um es mit Textzeilen zum Laufen zu bringen, kann man diesen Befehl neu zuordnen:

map gm :call cursor(0, virtcol('$')/2)<CR>
JooMing
quelle
gm scheint den Cursor in die Mitte des Bildschirms zu bewegen, aber wenn meine Textzeile kürzer als die Länge des Bildschirms ist, komme ich nicht in die Mitte. Entschuldigung für die Nichtklärung.
Teggy
@teggy: Ich verstehe. Ich habe meine Lösung so geändert, dass gm neu zugeordnet wird, um in die Mitte der Textzeile zu gelangen. Wie Sie sehen, kombiniert es Lösungen von Ephemient und Luc Hermitte.
JooMing
Wie Ephemient hervorhob, gibt es immer noch ein Problem mit harten Tarbs, da cursor () sie jeweils als ein Zeichen zählt. Darüber hinaus funktioniert es auch nicht mit Multi-Byte-Zeichen.
Luc Hermitte
7

Hier ist eine Lösung, die Hardtabs und auch Multi-Byte-Zeichen berücksichtigt.

:exe 'normal '.(virtcol('$')/2).'|'
Luc Hermitte
quelle
1

Hier ist die beste Lösung, die ich gefunden habe. Es ist nicht sehr praktisch, genau in die Mitte der Linie zu springen. Sie müssen den Cursor höchstwahrscheinlich noch einige Positionen bewegen, nachdem Sie sich in die Mitte bewegt haben. Was wäre, wenn Sie zu einem bestimmten Charakter springen könnten? Viele Leute suchen einfach nach dem Charakter und klicken dann auf "Weiter", bis sie ihn erreichen. Das ist langsam. Das Easy-Motion-Plugin bietet eine bessere Lösung.

Mein Favorit ist <leader><leader>sdann der Charakter, zu dem Sie springen möchten. Easy Motion ersetzt alle Übereinstimmungen durch verschiedene Buchstaben, aus denen Sie auswählen können. Siehe das Tutorial. Es ist ein lebensveränderndes Plugin ...

Sam Ruberti
quelle