Answers:
您可以使用命令简单地用换行符替换行上的任何连续空格:s/\s\+/\r/g
。\s\+
表示一个或多个空格字符,并且\r
是换行符,请参见:help :substitute
和:help regexp
有关详细信息。如果在以下行中运行命令:
foo bar baz
你得到:
foo
bar
baz
如果hlsearch
启用了此功能,但又不想在屏幕上到处都突出显示空格,则可以编写如下所示的小功能来避免它:
function! SplitLineNicely()
" Save previous value of last search register
let saved_last_search_pattern = @/
" :substitute replaces the content of the search register with the `\s\+`
" pattern highlighting all whitespaces in the file
substitute /\s\+/\r/g
" Restore previous search register
let @/ = saved_last_search_pattern
endfunction
\r
,看:help s/\r
。可以用文字换行符代替<c-v><cr>
。在此上下文\n
中为空字符,请参见:help s/\n
。
replaces the content of the register
-哪个寄存器?
使用vim
的替换可能是完成任务的更好方法之一,但是您也可以使用宏。假设我们有以下数据,光标位于第1行:
1 a b c d e f
~
从正常模式qq开始,点击将开始记录可通过调用的宏@q。之后键入的任何内容qq都可以通过上述调用重复进行。我们的目标是记录足够通用的常规命令,以实现无缝重复。
因此,我们可以键入0将光标移到行首,然后fspace将光标移到第一个空格。然后renter,我们可以输入,导致:
1 a
2 b c d e f
~
q现在点击是个好主意,因为我们可重复使用的宏已准备好进行重复。任意地,我们注意到还有4个空格要用换行符代替。因此,点击,4@q我们将q
宏重复4次,结果是:
1 a
2 b
3 c
4 d
5 e
6 f
~
请注意,由于我们设置宏的方式,将命令重复执行9000次是安全的,因为它只会影响当前行,并且由于最后一个数据条目的右边没有空格,因此fspace将“很好”的失败,阻止了用换行符替换数据。
所以从头开始重复一下:
qq0fspacerenterq9001@q
提供我们的结果。
9001
您的键盘上有一个按键,可以快速输入用户名。