示例:我有一些文本,比如这个 php 代码

if(empty($condition)) {
    // work here...
}

我的默认寄存器包含字符串“$NewCondition”。

我想将光标放在第一组 parens (...) 内并执行将导致以下结果的命令:
if($NewCondition) {
    // work here...
}

所以我的问题是:有没有办法使用默认寄存器替换括号内的文本?

我发现的大多数建议 such as this one 在嵌套括号时失败。

我也知道我可以命名寄存器,例如 "ayi( 将括号中的所有文本猛拉到寄存器 a 中,但我不想每次猛拉时都必须输入两个额外的字符。这就是我询问默认寄存器的原因。

在理想的解决方案中,当替换完成时,默认寄存器仍将包含“$NewCondition”。

最佳答案

vi("_dP
  • vi( 选择empty($condition)
  • "_d 将其删除到黑洞寄存器
  • P 将默认寄存器的内容放在光标之前,现在位于最后一个 )

  • 我经常使用这个,所以我有这个映射来缩短整个事情:
    vnoremap <Leader>p "_dP
    

    所以(以 , 作为 map 领导者)我做 vi(,p

    附带说明一下,如果您的光标在第二组括号中,您可以执行 vi(i( 以提高一级,依此类推。

    关于vim - vim 可以用默认寄存器替换文本对象吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7747426/

    10-13 09:21