Sie können den folgenden Befehl verwenden:
:%s/\w\zs\s*\zeFORMAT/^I
Das Muster wird die Leerzeichen zwischen FORMAT
und dem Ende des vorherigen Wortes und ersetzen sie durch eine Lasche entsprechen:
\w Any 'word' character
\zs Start the matching
\s* Any number of whitespace
\ze End the matching
FORMAT The actual word format
\zs
und \ze
Erlaube, die Ersetzung nur auf die Leerzeichen anzuwenden, siehe: :h /\zs
und :h /\ze
Beachten Sie, dass ^I
sollte es eine gute Art und Weise zu tun, wäre mit Strg + vRegisterkarte
Die tabular plugin empfohlen von @SatoKatsura eingefügt werden.
Sie können das auch verallgemeinern. Angenommen, Sie haben die folgende Datei:
:%s/^\(\w*\s\)\{1}\w*\zs\s*\ze/
wurden die Muster so detailliert sein können:
^ Match the beginning of the line
\(\w*\s\)\{1} One occurrence of the pattern \w*\s i.e. one column
\w* Another column
\zs\s*\ze The whitespaces after the previous column
Sie könnten den Wert ändern
COLUMN KEY_ID FORMAT 9999999999
COLUMN VALUE_1 FOO 99
COLUMN VALUE_2 BAR 99
Sie diesen Befehl verwenden könnte \{1}
, um den Befehl für die nächsten Spalten anzuwenden.
EDIT @aturegano Kommentar zu antworten, hier ist ein Weg, um die Spalte zu einem anderen zu richten:
%s/^\(\w*\s\)\{1}\w*\zs\s*\ze/\=repeat(' ', 30-matchstrpos(getline('.'), submatch(0))[1])
Die Idee ist immer noch die Whitespaces entsprechen, die auf dem ausgerichtet werden müssen, zweiten Teil des Ersetzungsbefehls verwenden wir einen Sub-Replace-Ausdruck (siehe :h sub-replace-expression
).
Dies ermöglicht es uns, einen Befehl aus dem Substitutionsteil zu verwenden, die wie folgt erklärt werden kann:
\= Interpret the next characters as a command
repeat(' ', XX) Replace the match with XX whitespaces
XX is decomposed like this:
30- 30 less the next expression
matchstrpos()[1] Returns the columns where the second argument appears in the first one
getline('.') The current line (i.e. the one containing the match
submatch(0) The matched string
[1] Necessary since matchstrpos() returns a list:
[matchedString, StartPosition, EndPosition]
and we are looking for the second value.
Sie dann einfach haben 30 durch die Spalte zu ersetzen, wo Sie Ihre nächste Spalte verschoben werden soll.
Siehe :h matchstrpos()
, :h getline()
und :h submatch()
Installieren Sie die [tabellarische] (https://github.com/godlygeek/tabular) Plugin und Lauf ': Tabularize'. –