我想在Ex one-liner中做一些非常简单的事情: 在PHP echo 语句中包装HTML行。
<p>Greetings</p>
*run command*
echo "<p>Greetings</p>";
这应该非常简单,因为只存在一个占位符来处理当前行。
我使用此命令
:s/\v(.*)/echo "\1";/g
然而,这使得Vim搜索并因此突出显示匹配的所有内容。*(=任何内容)。整个文件因此被突出显示,我必须手动清除最后一次搜索或搜索一些垃圾来清除它。
总结一下:在 Ex 命令期间是否存在任何现有的占位符或方式来引用当前行?
答案 0 :(得分:4)
您可以使用:nohlsearch
停止突出显示:
:s/\v(.*)/echo "\1";/g | noh
这仍然会破坏最后的搜索模式;要完全中和,请使用:
:s/\v(.*)/echo "\1";/g | call histdel('search', -1) | let @/ = histget('search', -1) | nohlsearch
或者,您可以切换到较低级别的功能,以避免匹配:
:call setline('.', 'echo "' . getline('.') . '";')
PS:您可以简化搜索模式;没有必要明确捕捉某些东西;看看如何简化它的许多其他答案。
答案 1 :(得分:3)
这样做:
:s/.*/echo "&";/
答案 2 :(得分:0)
看起来(.*)
正在消耗所有内容,包括换行符。尝试类似:
:s/\v(.*)\n/echo "\1";/g
答案 3 :(得分:0)
是的,你可以用点来引用当前行。例如,“。s / a / b /”仅替换当前行,或“3,.s / a / b /”替换第3行和当前行之间的所有行。如果没有在“s”前面放置一个行范围,则只会自动假设当前行(“。”)。
但那不是你的问题。 Vim不会改变其他线路,是吗?因此替代品仅限于当前行,就像它应该的那样。问题是,在搜索模式后,Vim会在整个文件中突出显示此模式。除了搜索垃圾之外,没有什么可以做的,就像你自己提出的那样。
答案 4 :(得分:0)
我会用......
:s!.*!echo "&";!
...对于这份工作,因为它很好而且很短,然后......
整个文件因此突出显示,我必须手动清除上一次搜索或搜索一些垃圾来清除它。
我在my .vimrc中有以下映射用于这样的场合:
nnoremap <Leader>/ :<C-U>nohlsearch<CR>
这允许我通过输入 \ / 来清除突出显示。
请参阅:
答案 5 :(得分:0)
我敢打赌,如果你查看vim-surround的来源,那里会有一些东西。或者只是安装该插件!