
Ich habe einige durch Leerzeichen getrennte Daten, die in logische Spalten strukturiert sind.
Zum Beispiel:
-71.12 0.150667281077312 0.002211111620961
-71.12 0.118496551977185 0.001861996157838
-71.12 0.060235544965347 0.002297217048708
-71.12 0.153327288481261 0.006010183052808
-71.12 0.124123948663225 0.002061072004207
-71.12 0.207259139445973 0.006717235817697
-60.96 0.157543582366536 0.002296431543423
-60.96 0.235150926363369 0.003101414303501
-60.96 0.259568965388604 0.00509310173342
-60.96 0.249144803559256 0.005918713226128
-60.96 0.293059928383778 0.004162901523096
-60.96 0.450566914005046 0.007136854816405
-50.8 0.750617196149124 0.009051035617119
-50.8 0.353984107758976 0.004572175646195
-50.8 0.528151230868303 0.007799510359974
-50.8 0.183651354357074 0.005641329790889
-50.8 0.41466714360944 0.005488604915895
-50.8 0.59927731014109 0.008919537503349
-40.64 0.535018719259586 0.006512021643672
-40.64 0.796646452506777 0.011224718752927
-40.64 0.484977557781429 0.006918056698062
-40.64 0.823404773156849 0.011420881130741
-40.64 0.723696626287657 0.008809901349382
Ich möchte die dritte Spalte vom Rest der Daten trennen. Ich weiß, dass man dafür ein Makro verwenden kann. Ein funktionierendes Beispiel ist:
mbWWDGo<Esc>p'bj
Ich wollte jedoch wissen, ob es eine integrierte Möglichkeit gibt, dies als einzelne logische Einheit auszuschneiden und einzufügen. Eine blockweise Auswahl reicht nicht aus, da die Zeilen nicht regelmäßig sind. Leerzeichen in Tabulatoren zu ändern, scheint eine gute Idee zu sein, aber ich habe auch einige extrem kurze Zeilen wie:
0 1 0.012098302364638
Das wird also nicht unbedingt funktionieren (es sei denn, ich stelle meinen Tabstopp auf einen verrückten Wert ein).
Irgendwelche Ideen, oder ist ein Makro das Beste, was ich tun kann?
Antwort1
Es gibt viele alternative Möglichkeiten, aber was den Tippaufwand angeht, ist Ihr Makro unschlagbar. Wenn Sie dies jedoch häufig benötigen, können Sie eine benutzerdefinierte Zuordnung oder einen benutzerdefinierten Befehl erstellen (der sehr schnell abgerufen werden kann) und Sie profitieren von einer anderen Implementierung in Bezug auf Robustheit und Verständlichkeit.
- Entfernen Sie vorübergehend die anderen Spalten, ziehen Sie:
mb:%substitute/.*\s// | %yank | undo | 'bput
- Filtern Sie den Puffer als Zeichenfolge:
:put =map(getline(1, '$'), 'substitute(v:val, ".*\\s", "", "")')
Wenn Sie Plugins in Betracht ziehen möchten,csv.vim-Pluginhat ein :CSVColumn
Kommando.