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

g9icjywg  于 2022-11-11  发布在  其他
关注(0)|答案(8)|浏览(306)

假设我有以下文本

word1 word2              word3 word4

并且光标位于word2word3之间的某处。

问题

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

最初的想法

  • :s/ */ /g

不过,我想可能有一些更快的东西,如diw,但空间。
如果当光标位于word3w2word2上时,该策略也能工作,那也是很好的。

1l5u6lss

1l5u6lss1#

这对我很有效:
:s/\s\+/ /g

xxslljrj

xxslljrj2#

ciw,然后退出到正常模式,尽管只有在空间上才有效。

hfwmuf9z

hfwmuf9z3#

请尝试将所有双空格(重复零次或多次)替换为单个空格。

:s/  \+/ /g
ttp71kqs

ttp71kqs4#

我使用(绑定到热键)

i<enter><esc>kJ

i-插入模式
k-向上一行
J-将行连接在一起
无论光标在空格内还是在word3w上,都可以使用此方法,并将光标放在刚刚连接的单词的开头。如果您希望它与word2上的2一起使用,只需将第一个i替换为a

afdcj2ne

afdcj2ne5#

%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
cqoc49vn

cqoc49vn6#

我会分两步完成
1.$ //游标移至行尾的空白处

  1. dw //删除空格(必要时使用.重复)
a7qyws3x

a7qyws3x7#

在3次击键中,将此添加到您的init.vim(neovim)或.vimrc(vim):

nnoremap <silent> di<Space> /<Space><Space>diwi<Space><Esc>:noh<CR>
nnoremap <silent> da<Space> /<Space><CR>diw:noh<CR>

现在,在NORMAL模式下,您可以使用“deleteirrelevantspace”替换为单个空格,使用“deleteallspace”删除所有空格。
这适用于当前或下一个空格块。不幸的是,它不能与点.操作符重复。

6g8kf2rb

6g8kf2rb8#

如果您正在编辑word2右侧第二个空格上的dt<nextchar>,则可以使用dtw

相关问题