Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用垂直选择VIM添加新行_Vim - Fatal编程技术网

使用垂直选择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键。我希望扩展所有的块。什么也没发生。为什么? 我知道一个简单的替换或宏就可以救

假设我们在VIM中打开了以下文件内容:

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}/