使用垂直选择VIM添加新行
假设我们在VIM中打开了以下文件内容:使用垂直选择VIM添加新行,vim,Vim,假设我们在VIM中打开了以下文件内容: function a1 {} function a2 {} function a3 {} function a4 {} function a5 {} function a6 {} function a7 {} 我想以这种方式展开所有函数: function an { } 为此,我尝试使用垂直选择(使用Ctrl+V): 然后我按I键,然后进入(插入模式): 然后我按下Esc键。我希望扩展所有的块。什么也没发生。为什么? 我知道一个简单的替换或宏就可以救
function a1 {}
function a2 {}
function a3 {}
function a4 {}
function a5 {}
function a6 {}
function a7 {}
我想以这种方式展开所有函数:
function an {
}
为此,我尝试使用垂直选择(使用Ctrl+V):
然后我按I键,然后进入(插入模式):
然后我按下Esc键。我希望扩展所有的块。什么也没发生。为什么?
我知道一个简单的替换或宏就可以救我。我知道还有其他选择,但我想知道为什么在使用垂直选择时没有添加新行。尝试使用sed:
:%!sed的/}/\n\n}/g
读到你答案的底部,你意识到你不是在寻找解决办法。。。我不知道为什么它不起作用。Ctrl+V不是“垂直选择”,而是“分块视觉”。顾名思义,它用于选择文本的“块”(矩形)
如果在选定块内插入换行符,则会中断其下方的所有内容。结果是,Vim不再有一种有意义的方式将更改应用于块的其余部分,因为它不再清楚“其余部分”是什么。我要做的是对行的范围应用一个
:替换,例如,通过可视模式对它们进行寻址:
:'<,'>s/{}$/{\r\r}/
:”如Max所说,不能在块视觉vim模式下插入enter,文档说明:
可视块更改(v_b_c):块中所有选定的文本将替换为相同的文本字符串。使用“c”时,所选文本将被删除并启动插入模式。那么你可以
输入文本(无换行)。当你击球时,相同的弦是
插入到以前选定的所有行中
我发现最好的解决方法是:
- 按位选择要插入换行符的列,例如1x3列:
CtrlVjj
- 插入文本块中唯一的标记,例如使用标记“NEWL”:
shiftINEWLesc
- 执行块的直线选择,例如:
shiftVjjj
- 请使用换行符(ctrlventer->^M)替换刚刚插入的标记,例如:
:s/NEWL/ctrlventer/g
基本上你没有回答我的问题。我在问题的最后写道,我知道还有其他解决方案(如替换、宏等)来扩展块,但我想知道为什么这种方法不起作用。“阅读到答案的底部,我意识到你没有寻找解决方法……我不确定为什么它不起作用。”
function a1 {
}
function a2 {}
function a3 {}
function a4 {}
function a5 {}
function a6 {}
function a7 {}
:'<,'>s/{}$/{\r\r}/