2011-10-11 61 views
3

我想插入的多行一列之前返回,所以选择该列的字符Ctrl键 + V在正常模式,然后键入I,然后进入插入模式。输入后输入键,然后按键Esc,只有一条线断了。有什么办法可以执行这个功能吗?谢谢。如何在一列之前断行?

+1

相关: [查找每个第三个值并在VIM中插入cr或换行符](http://stackoverflow.com/questions/7714278/find-every-thi rd-value-and-insert-cr-or-newline-in-vim/7714512#7714512) – Jin

回答

6

要在特定列之前中断行,请使用\%v搜索模式原子 ,该位在零宽度的给定位置匹配(请参阅:help /\%v)。以下示例命令的 将在第八列之间的第七个和第 之间插入新的行字符。

:%s/\%8v/\r/ 

这个想法可以扩展到使用光标所在 当前所在的列数。

:exe'%s/\%'.virtcol('.').'v/\r/' 

上述命令既不需要选择那些列。 但是,如果您更容易以块状方式指定分割列 可视模式,请在所选区域内使用\%V零宽度原子匹配(请参阅 )。

:'<,'>s/\%V/\r/ 
1

快速和肮脏的解决方案 - 首先,插入一些不在列的字符(比如#),然后,gv,然后'<,'>s/#/\r/g

会很高兴,如果提供更聪明的解决方案。

0

选择期望的线,在第三列打破之后:

:'<,'>g/./norm! 3|a^M 

,相似(^M<c-v><CR><c-q><CR>插入)来回答关于Find every third value and insert cr or newline in VIM

+0

这个命令感觉有点过于复杂。另外,其性能明显低于[纯代换]的情况(http://stackoverflow.com/questions/7724089/how-to-break-lines-before-one-column/7725184#7725184)。顺便说一下,它也适用于[答案]中提出的命令(http://stackoverflow.com/questions/7714278/find-every-third-value-and-insert-cr-or-newline-in-vim/7714682#7714682)你链接到:[解决方案使用替代](http://stackoverflow.com/questions/7714278/find-every-third-value-and-insert-cr-or-newline-in-vim/ 7721025#7721025)要快得多。 –

相关问题