在Vim中删除两个单词之间的多个空格的有效方法

时间:2011-03-01 05:31:53

标签: vim

说我有以下文字

 word1 word2              word3 word4

,光标位于word2word3之间。

问题

  • 在Vim中用一个空格替换word2word3之间的多个空格的最快方法是什么?

初步想法

  • :s/ */ /g

但是,我认为可能会有更快的像diw但是对于空格。

当光标位于w word32word2上时,策略也会有效。

6 个答案:

答案 0 :(得分:29)

这对我有用:

:s/\s\+/ /g

答案 1 :(得分:18)

ciw然后退回到正常模式,虽然只有你在空间时它才会起作用。

答案 2 :(得分:11)

尝试用一个空格替换所有双重空格(重复零次或多次)。

:s/  \+/ /g

答案 3 :(得分:1)

我使用(绑定到热键)

i<enter><esc>kJ

i - 插入模式

k - 上一行

J - 一起加入

无论光标在空白区域内还是在w的{​​{1}}内,这都有效,并将光标放在刚加入的单词的开头。如果您希望它与word3上的2一起使用,只需将第一个word2替换为i

答案 4 :(得分:0)

我会分两步完成这个步骤

  1. $ //光标到达行尾的空格
  2. dw //删除空格 (使用。必要时重复)

答案 5 :(得分:0)

%s/\(\w\)\s\+\(\w\)/\1 \2/g
%  - global
s - search
\( - escape (
\w - (any letter, digit)
\) - escape )
\(\w\) - remember letter/digit before space as \1
\s - whitespace
\+ - escape +
\s\+ - 1 or more whitespace space
\(\w\) - remember letter/digit after space(s) as \2
/ - replcae with
\1 - remembered last letter/digit before space
' ' - space character here - single space
\2 - remembered first letter/digit after white space(s).
/ - end of replace
g - globally