假设我们在VIM中打开了以下文件内容:
function a1 {}
function a2 {}
function a3 {}
function a4 {}
function a5 {}
function a6 {}
function a7 {}
我想以这种方式扩展所有功能:
function an {
}
为此,我尝试使用垂直选择(使用 Ctrl + V ):
function a1 {█
function a2 {█
function a3 {█
function a4 {█
function a5 {█
function a6 {█
function a7 {█
然后我按了 I 。然后输入(在插入模式下):
function a1 {
}
function a2 {}
function a3 {}
function a4 {}
function a5 {}
function a6 {}
function a7 {}
然后我按了 Esc 。我希望扩展所有块。没啥事儿。为什么呢?
我知道简单的替换或宏会拯救我。我知道有其他选择,但我想知道为什么在使用垂直选择时没有添加新行。
答案 0 :(得分:6)
Ctrl + V 不是"垂直选择",它是" blockwise-visual"。顾名思义,它是用于选择"块" (矩形)文字。
如果在所选块中插入换行符,则会破坏其下方的所有内容。结果是,Vim不再有意义的方式将更改应用于块的其余部分,因为它不清楚什么"其余的"已经了。
答案 1 :(得分:0)
我要做的是为行范围应用:substitution
,例如通过视觉模式解决这些问题:
:'<,'>s/{}$/{\r\r}/
正如Max已经回答的那样,视觉块插入仅在您不通过插入其他行(或在编辑时四处移动)来破坏块的布局时起作用。
答案 2 :(得分:0)
就像Max所说,输入无法插入blockwise-visual vim模式,文档说:
视觉块更改(v_b_c):块中的所有选定文本将替换为相同的文本字符串。使用&#34; c&#34;删除所选文本并启动插入模式。那你可以 输入文字(没有换行符)。当你点击时,相同的字符串是 插入所有先前选定的行。
我找到的最佳解决方法是:
按位选择要插入换行符的列,例如列1x3:
CTRL Vjjj
插入一些在操作的文本块中唯一的标记,例如使用标记&#34; NEWL &#34;:
移 INEWL ESC
对块进行行选择,例如:
移 Vjjj
替换刚用换行符插入的标记( ctrl v 输入 - &gt; ^ M),例如:< / p>
:S / NEWL / CTRL v 输入 /克
答案 3 :(得分:-1)
尝试使用sed:
:%!sed 's/}/\n\n}/g
阅读你答案的底部并意识到你没有找到一个解决方法......我不确定它为什么不起作用。