0

假设我的文件中有这个方法

public function handleBatch(array $records)
    {
        $messages = array();

        foreach ($records as $record) {
            if ($record['level'] < $this->level) {
                continue;
            }
            $messages[] = $this->processRecord($record);
        }

        if (!empty($messages)) {
            $messages = $this->getFormatter()->formatBatch($messages);
            self::$json['rows'] = array_merge(self::$json['rows'], $messages);
            $this->send();
        }
    }

如何直观地选择从 public 关键字到最后一个 } 的方法?我已经尝试过 v2aBV 但对我不起作用。

4

4 回答 4

1

可以跳转到定义,启动视觉模式,跳转到左括号,然后跳转到右括号并切换到视觉模式:

[[v]m%V

不过,这仍然需要大量输入,但很容易将其转换为粗略的映射:

nmap vaf [[v]m%V

请注意,vim-indent-objectvai以一种更智能的方式完全按照您的意愿行事。

于 2013-10-16T10:54:50.003 回答
1

您已经知道aB/a{文本对象。使用[m,您可以转到方法的开头(在花括号语言中);这应该避免在深度嵌套结构中使用大量计数。

当您处于视觉选择中并需要扩展“另一面”时,o您可以到达那里。o移动允许您包含前面的函数定义,例如 with k

替代方法

我通常用另一个特性来解决选择/移动整个方法的问题:折叠。通过正确的设置(:setlocal foldmethod=syntax当语法提供折叠定义时就足够了),所有方法都折叠在一起,并且可以快速选择一个V,或者直接dd/p它。

于 2013-10-16T10:25:05.467 回答
1

如果您的光标在 上*f*unction,您可以尝试按:

v]m%
于 2013-10-16T10:31:06.233 回答
0

如果你在方法定义之前用光标,应该使用下面的命令:

]]v]m%

如果您在方法定义之后使用光标- 这也适用于方法主体中的光标 - 您应该使用以下命令:

[[v]m%

这将使它选择你的方法和你的身体的整个定义。

如果您想在选择中留下“公共”一词,应使用以下命令

1 - 如果光标在方法定义之前:

]]wv]m%

2 - 如果光标在方法定义之后:

[[wv]m%

于 2013-10-30T13:20:27.903 回答