考虑在 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(请注意,有多个补丁,您可能想要最后一个)。