Suppose you have this text:
name1 = "John"; age1 = 41;
name2 = "Jane"; age2 = 32;
name3 = "Mike"; age3 = 36;
...
and you want to split each line into two lines to give a result like this:
name1 = "John";
age1 = 41;
name2 = "Jane";
age2 = 32;
name3 = "Mike";
age3 = 36;
...
How would you automate this operation?
Some notes:
:'<,'>:norm ^3f r^M
***,*** explanation of the sequence:
-norm
for executing the following commands in normal-mode
-^
for moving the cursor to the beginning of the line
-3f<space>
for moving the cursor to the 3rd space in the line
-r^M
for replacing that space with a new-line
Place your cursor anywhere on the first or last line of the text you want to manipulate. Press Shift+V to enter line mode. The words VISUAL LINE will appear at the bottom of the screen. Use navigation commands, such as the Arrow keys, to highlight multiple lines of text.
Press V to switch to VISUAL LINE mode and then go to line 1701 by typing: 1701G . Now your lines are selected, you can run a command on them. For example, to replace foo with bar type: :s/foo/bar/ .
To operate on the entire file, use this:
:%s/; /;\r/
To operate only on the selected text, use this:
:'<,'>s/; /\r/
English translation:
"Replace every occurrence of semi-colon followed by a space with semi-colon followed by a newline."
Explanation:
% - operate on the entire file
s - substitute
/ - symbol that separates search/replace terms
; - the character you're searching for (notice I added a space)
;\r - the replacement text (semi-colon followed by newline)
That's about as basic as it gets for substitution in Vi.
For more geekiness:
I actually have the following mapped in my .vimrc
file for situations like this:
"
" add a newline after each occurrence of the last search term
"
nnoremap SS :%s//&\r/<CR>
This command splits each line of a file at the first occurrence of the last search pattern.
So, for your use-case you would do this:
;
(you may or may not want to include a space... up to you)SS
Each line of your file will get split at the first ;
symbol.
To clarify, you would use the following 5 keystrokes:
/ ; ENTER S S
This is very handy for quickly formatting XML, HTML, etc...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With