示例:我有一些文本,比如这个php代码
if(empty($condition)) {
// work here...
}
我的默认寄存器包含字符串“$ NewCondition”。
我想将光标放在第一组parens (...)
内并执行一个命令,结果如下:
if($NewCondition) {
// work here...
}
所以我的问题:是否有某种方法可以使用默认寄存器替换parens中的文本?
我发现的大多数建议such as this one都会在嵌套的parens中失败。
我也知道我可以命名寄存器,例如"ayi(
将parens中的所有文本拖入寄存器a
,但我不希望每次我都要输入两个额外的字符猛拉。这就是我要问默认寄存器的原因。
在理想的解决方案中,当替换完成时,默认寄存器仍将包含“$ NewCondition”。
答案 0 :(得分:4)
vi)p
不幸的是,这也会将旧文本放在默认寄存器中。
答案 1 :(得分:2)
vi("_dP
vi(
选择empty($condition)
"_d
将其删除到黑洞寄存器P
将默认寄存器的内容放在光标之前,该光标现在位于最后)
我经常使用这个,所以我有了这个映射来缩短整个事情:
vnoremap <Leader>p "_dP
所以(使用,
作为mapleader)我做vi(,p
。
作为旁注,如果您的光标在第二组括号中,您可以vi(i(
向上升级,依此类推。
答案 2 :(得分:1)
试试这个:"_ci)<c-r>"<esc>
此处有一些详细解释:"_
表示为以下命令选择“黑洞”寄存器。因此,在下一个操作中删除的文本将被丢弃,不会被放入任何寄存器。 ci)
表示“更改内括号”,它将删除当前括号对中的所有文本,然后进入插入模式。插入模式下的<c-r>
表示将指定寄存器中的文本插入当前光标位置,"
选择“默认寄存器”。最后,我们使用<esc>
将我们带回正常模式。
确实有很多关键击球!如果您经常使用此类操作,则可以考虑为其创建键盘映射。有关详细信息,请参阅:help map
。