2014-02-13 10 views
7

Hin und wieder stoße ich auf diese Art von Bearbeitungsproblem in Vim.In Vim, wie im Block-Modus, aber im normalen Modus einfügen, Einfügen als neue Zeilen?

Ich habe Textformatierung in einer Tabelle, die ich in eine Liste verwandeln möchte.

Vorher:

AAA BBB 
AAA BBB 
AAA BBB 

CCC DDD 
CCC DDD 
CCC DDD 

Nach:

AAA 
AAA 
AAA 

BBB 
BBB 
BBB 

CCC 
CCC 
CCC 

DDD 
DDD 
DDD 

Natürlich nicht so trivial, wie dieses Beispiel. Die Blöcke können haarigen Inhalt haben, größere und inkonsistente Anzahl von Linien usw.

So wie ich es jetzt tue ein bisschen wie ein Hack zu sein scheint:

  1. Wählen Sie einen Block aus der rechten Spalte in Block Modus: CTRL-q in der Windows-Version, um die obere linke Ecke auszuwählen.
    d um den Block zu schneiden.
  2. Beachten Sie, wie viele Zeilen im Block waren, fügen Sie dann manuell so viele Leerzeilen hinzu.
  3. Gehen Sie zur oberen linken Ecke des neuen leeren Bereichs, den ich erstellt habe. SHIFT+p, um den Block in diesen Bereich einzufügen.

Schritt ist der grobe Teil.

Bei einem normalen Nicht-Block-Schnitt oder -Kopie wird immer in "neue" Zeilen eingefügt. Eine Art "Einfügen" oder "Anhängen" -Operation. Ein Blockschnitt oder Kopieren wird normalerweise in eine Art "Überschreib" -Modus eingefügt.

Gibt es eine bessere Möglichkeit, den "Blockmodus" zu kopieren oder zu schneiden, aber den "insert/append mode" einzufügen?

Antwort

6

Die ex command:put wird immer eine Registerzeile einfügen.

Schneiden Sie den Textblock mit dem visuellen Blockmodus wie zuvor aus und führen Sie dann :put anstelle von aus.

Wenn Sie Pasten auf verschiedene Arten "umwandeln" möchten, verwenden Sie das Plugin von @Ingo Karkat.

Weitere Informationen finden Sie unter:

:h pu 
+0

Dies scheint die prägnanteste und funktionierte perfekt für das, was ich tat. – hippietrail

1

Mein UnconditionalPaste plugin hat eine glp Befehl (geht linewise Paste), die die Registerinhalte als neue Zeilen einfügen, unabhängig davon, wie sie gezerrt wurden (beispielsweise in blockartiger Modus).

Es hat auch einige andere hilfreiche Befehle, die die Art beeinflussen, wie das Register eingefügt wird.

2

können Sie blockieren weise wählen Sie den BBB Teil als, wie Sie getan haben, und nach dem Schnitt von d zum Beispiel, führen Sie diesen Befehl ein:

call setreg('"',@",'V') 

dann können Sie fügen Linie zum Ziel, es wird Ihr Block drehen "Ziehe" zeilenweise ein.

Sie können eine Zuordnung erstellen, wenn Sie dies häufig tun müssen.

+0

Ist umgekehrt auch? Der 'setreg' ist ziemlich kryptisch. – hippietrail