在Vim的选择中用新行替换空格
我试图用花括号内的新行替换所有空格。这就是我所做的:在Vim的选择中用新行替换空格,vim,Vim,我试图用花括号内的新行替换所有空格。这就是我所做的: 选择了里面的内容(vi{) 运行替换命令:s/\%V/\r/g 但是Vim只替换了第一次出现的空格。我不确定我在这里遗漏了什么。下面是我执行此操作的行: 从“../../redux/modules/wrapper/wrapper”导入{setNotificationContent,toggleContext,resetContext} 下面是发生的情况。首先使用vi选择可视区域{。这将设置两个标记的位置。s命令仅在这些标记内匹配,因为\%
- 选择了里面的内容(
)vi{
- 运行替换命令:
s/\%V/\r/g
从“../../redux/modules/wrapper/wrapper”导入{setNotificationContent,toggleContext,resetContext}
下面是发生的情况。首先使用vi选择可视区域{
。这将设置两个标记的位置
。s
命令仅在这些标记内匹配,因为\%V
。但是在第一个
被换行后,这些标记意味着什么?旧的“可视区域”概念当然已经不存在了,但问题是替换命令是否能够跟上被替换文本的新概念。我猜vim大致上是“进行替换并将当前行号增加插入的新行数。”通常情况下,这很好,但您的匹配中有\%V
运算符,因此在当前行号增加后,将不会匹配任何内容。(有关更多详细信息,请参阅,点击ctrl-f多行
查找相关部分)
在这种情况下,要获得可能需要的替换,可以使用:
s/\({\|,\) \| }\@=/\1\r/g
要了解视觉选择实际上是如何设置这些标记的,请选择一些视觉区域,然后按gv
。它将重新选择该视觉区域。点击:marks
查看
的位置。现在编辑您以前选择的区域,并检查标记的位置是否更改注意,vim有点聪明,当上面插入或删除一些行时,它会跟踪正确的行号,但不会更新列号
要查看当前行在多次替换时的增量,请尝试此操作。假设我们有一行:
aaa
现在,我们运行s
命令:
:s/a/\= line('.') . '_'/g
:s/a/\= line('.') . "\n"/g
\=
将字符串替换为表达式的结果,请参见:help sub replace
。结果应类似于
6_6_6_
我在第6行,这就是我的结果如此金属化的原因。现在,u
ndo,运行这个s
命令:
:s/a/\= line('.') . '_'/g
:s/a/\= line('.') . "\n"/g
现在,我们将在行号后添加一个换行符,而不是。
6
7
8
因此,line('.')
函数每次都在不同的当前行上被调用。Tada
哦,是的,vim跟踪标记的一个有趣的方法是,如果你有以下几行:
import { something, something, something
}
然后执行ga{
(!notgiv
),运行s
命令
s/\%V /r/g
你大致得到了你想要的行为(取决于你是否删除了尾随空格)。证明作为练习留下,并研究你为什么需要ga{
而不是gi{
(提示:签出:help{
和:help exclusive
)