将光标定位在变量或数组成员的末尾

将光标定位在变量或数组成员的末尾

考虑在 PHP 中表示变量和数组成员的方式:

$something
$something['member']

我如何确保光标位于最后一个字符上?简单地使用E不会有帮助,因为变量后面可能有其他字符,如下所示:

echo "I saw (".$something.") happen.";
echo "I saw (".$something['member'].") happen.";

我希望答案能够让光标位于相关文本($something$something['member'])上的任何位置,但我对至少对字符有效的答案感到满意something

请注意,我的目标是使用该问题的答案来进行以下映射:

nnoremap <leader>fv a}<Esc>ldf"F$i{<Esc>dF"

该映射旨在将其转换为:

echo "I saw (".$something.") happen.";
echo "I saw (".$something['member'].") happen.";

echo "I saw (" . $something . ") happen.";
echo "I saw (" . $something['member'] . ") happen.";

变成这样:

echo "I saw ({$something}) happen.";
echo "I saw ({$something['member']}) happen.";

答案1

我会用不同的方法处理这个问题。虽然你真正想要的是“一个变量”,但你大致想要的是“引号内的所有内容,以及引号本身”,这应该足够接近。为此,你可以使用文本a"对象 ( :help text-objects)。将光标放在相关文本的任意位置,键入va"以直观地选择所需的区域,或按删除相关文本并将其放置在“a”寄存器中,或者对文本对象执行任何其他操作。将文本修改为你想要的内容"ada"应该相当简单(可能使用,也可能使用其他方法)。substitute()

说实话,这也是我通常使用录制的宏的情况。

如果a"选择太多,您可以尝试使用补丁添加任意文本对象,这样您就可以使用im.(匹配内部的 . 字符)获取从 '.' 到另一个 '.' 的所有内容,或类似内容。在此处获取补丁:https://groups.google.com/d/topic/vim_dev/pZxLAAXxk0M/discussion(请注意,有多个补丁,您可能想要最后一个)。

相关内容