问题
Say I have the following code:
<p>
Hello
</p>
And I want to make it
<p>Hello</p>
I would like to put the cursor in normal mode at the end of line 1, so on the ' > ' and have a command to delete all spaces until the next character. The closest I can think of is the motion
d/Hello
which deletes everything until Hello but the issue is that it deletes also the character under the cursor (the ' > ') so I end up with
<pHello
</p>
How would you do that?
回答1:
One way when you won't need to repeat this action many times.
JxJx
Explanation:
J # Join current line with next one but substitute end of line with a space.
x # Remove the space.
Jx # Repeat same process for last line.
回答2:
There's a tag
text-object in vim:
- put cursor within tag, press vat to select entire tag
- press :, it becomes
:'<,'>
- type j, it becomes
:'<,'>j
- press Enter to join lines
:help v_at
at "a tag block", select [count] tag blocks, from the
[count]'th unmatched "<aaa>" backwards to the matching
"</aaa>", including the "<aaa>" and "</aaa>".
See |tag-blocks| about the details.
When used in Visual mode it is made characterwise.
回答3:
When standing anywhere in the second line (the one that says Hello
), press the following keys: ^d0vatgJ
. Simply explained:
- ^ will go to the first non-whitespace character,
H
- d0 will delete to the beginning of the line
- vat will select the entire tag
- gJ will join all the lines without inserting spaces
If you start on the H
, you can skip the ^ part.
来源:https://stackoverflow.com/questions/8850512/vim-delete-all-blank-space-until-next-non-blank-character