2013-01-18 11 views
5

Gibt es eine Möglichkeit, ein Zeichen in einer bestimmten Zeile in vim zu platzieren, auch wenn die Zeile kurz ist?Platzieren von Zeichen in einer bestimmten Spalte in vi

Zum Beispiel trage ich zu einem Projekt bei, das einen Kommentarblockstil hat, der 79 Spalten breit ist, mit einem Kommentarzeichen an jedem Ende, z.

!--------------! 
! Comment  ! 
! More Comment ! 
!--------------! 

aber es ist wirklich ärgerlich Raum über ihn, auch mit Erraten großen Zahlen (35i < SPACE> < ESC>)

Gibt es einen einfachen Befehl, der das für mich tun wird, oder ein Makro oder etwas, was ich schreiben könnte?

+0

möglich duplizieren von http://stackoverflow.com/questions/3364102/how-to-fill-a-line-with-character-x-up-to-column-y-using-vim – Huluk

+0

Sie möchten vielleicht Schaut euch [UltiSnips] (http://www.vim.org/scripts/script.php?script_id=2715) und das ['box'snippet] (https://github.com/SirVer/ultisnips/blob/master) an /UltiSnips/all.snippets#L82). Wenn es dich nicht dorthin bringt, kann es dich nahe an eine Lösung bringen. – jszakmeister

Antwort

8
set ve=all 

Dann können Sie (h, j, k, l) an einen beliebigen Ort verschieben. egal wie kurz deine Linie ist.

gibt es 4 Optionen block, all, insert, onemore für Details:

Scheck :h virtualedit

auf diese Weise nach dem kurzen Kommentar eingegeben haben, dann <ESC>080l an der richtigen Stelle auf dem Tailing !

zu gehen geben Sie kann es auch zuordnen, wenn es oft

verwendet wird, dann funktioniert es wie folgt aus:

enter image description here

+2

Sie können die '080l' auf nur' 80 | 'vereinfachen. –

+0

ja, @PeterRincker, wusste ich |, aber nicht so oft. also kam es nicht zuerst ... sollte es sich merken ... – Kent

2

Setzen Sie diese in Ihrer .vimrc Datei und starten Sie vim:

inoremap <F1> <C-r>=repeat(' ', 79-virtcol('.'))<CR>!<CR> 

Damit drücken Sie einfach F1 (oder was auch immer Schlüssel Sie Karte) im Einfügemodus nach mit Leerzeichen Kommentartext automatisch Pad Eingabe und legen Sie eine ! in Spalte 79.er

eine weitere einfache Möglichkeit ist irgendwo ein leeres Kommentarfeld der richtigen Größe zu halten, yank/paste es wo in es mit Ihrem Kommentar jedes Mal benötigte und nur R eplace die Räume.

Wenn Sie ein Feld zu formatieren mögen, die zu kurz ist, ist eine Möglichkeit, von dem Kommentar in Ihrem Beispiel zu starten, stellen Sie einen Visual-Block (Ctrl + v), um die einzelnen Spalt nur links von der Auswahl an seiner rechten Kante ziehen (y), dann wiederholt einfügen (p). Dadurch wird die gesamte rechte Seite des Kommentars sukzessive um einen Schritt nach rechts verschoben. Wiederholen Sie dies, bis es die gewünschte Länge hat.

Wenn Sie den Kommentartext bereits eingegeben haben, können Sie ein Makro verwenden, um die rechte ! Markierung an der richtigen Stelle einzufügen. Zum Beispiel erfassen ein Makro (qa), die mehr Zeichen als nötig sind, um für jede Zeile (zB ARaumEsc) anhängt, verwenden dann die goto Spalte (|) an den richtigen Ort zu gehen ( |) und die überschüssigen Zeichen von dort ersetzen (C! Esc), dann eine Zeile nach unten ( j) und Stoppen der Aufnahme ( q). Wird dieses Makro wiederholt (@a), dann "repariert" jede Zeile der Reihe nach und geht zum nächsten über. Insgesamt: qa80A<space><esc>79|C!<esc>jq und dann @a, wenn nötig. Klingt komplex, ist aber praktisch, sobald Sie es haben.

+1

'col ('.')' Ist hier falsch zu verwenden. Verwenden Sie 'virtcol ('.')', Da es nur mit Zeichen arbeitet, deren Breite nicht der Bytelänge entspricht (normalerweise Tabs und Unicode-Zeichen) ('col()' gibt den Byte-Offset vom Zeilenanfang zurück und 'virtcol()' gibt die Zahl zurück) der Anzeigezellen belegt). – ZyX

+0

@ZyX - guter Punkt, aktualisiert die Antwort. Vielen Dank! –

0

Ich kopiere normalerweise einfach eine vorhandene Zeile in den Kommentarblock (oder kopiere eine aus einer anderen Datei) und modifiziere sie dann. Wenn der zu ersetzende Text ungefähr der Größe entspricht, die Sie schreiben möchten (z. B. wenn Sie den Namen des Autors ändern), müssen Sie wahrscheinlich nur einige Leerzeichen hinzufügen oder löschen, um alles in eine Reihe zu bringen. Es ist viel weniger schmerzhaft, als auf die gewünschte Breite zu verteilen.

Wenn Sie jemals einen Block haben, die zu lange auf diese Weise erhält, ist ein netter Trick den Cursor auf der 79th Spalte zu platzieren und dw drücken. Das wird alle Räume bis zum ! am Ende löschen.

0

Mein AlignFromCursor plugin bietet Befehle und Zuordnungen, die nur den Text rechts vom Cursor ausrichten und den Text unverändert beibehalten. Mit dem Cursor im Leerzeichen links von ! können Sie es mit <Leader>ri ausrichten.

1

Hier gibt es sicher schon gute Antworten, besonders die virtualited Antwort. Ich sehe jedoch nicht die Methode, die mir am intuitivsten erscheint. Ich würde eine leere Zeile für die letzte Zeile des Kommentars erstellen, die gerade von den Ausrufezeichen umgeben ist. Dann würde ich eine neue Kopie der leeren Zeile ziehen und einfügen, zu der alten leeren Zeile gehen und zu dem Punkt gehen, an dem ich bearbeiten möchte und Überschreibmodus verwenden (), um meinen Text hinzuzufügen, ohne die Platzierung der zu beeinflussen Ende des Ausrufezeichens

Manchmal sind die einfachsten Methoden, obwohl etwas klobiger, am einfachsten zu verwenden und zu erinnern.