Css 如何用不同的字符串快速替换字符串模式?
例如,我有许多HTML选项卡要设置样式,它们使用不同的类,并且具有不同的背景。背景图像文件的名称与类名相对应 我发现这样做的方式是yank:Css 如何用不同的字符串快速替换字符串模式?,css,vim,Css,Vim,例如,我有许多HTML选项卡要设置样式,它们使用不同的类,并且具有不同的背景。背景图像文件的名称与类名相对应 我发现这样做的方式是yank: .tab.home { background: ...home.jpg... } 然后粘贴,然后:s/home/about 这将重复几次。我发现&可以用于重复最后一个替换,但只能用于相同的目标字符串。用不同的目标字符串重复替换的最快方法是什么 或者,也许有更有效的方法来做这件事?从手册中,我发现:s//新的替代品。似乎打字太多了 寻找更好的答案。我快
.tab.home {
background: ...home.jpg...
}
然后粘贴,然后:s/home/about
这将重复几次。我发现&可以用于重复最后一个替换,但只能用于相同的目标字符串。用不同的目标字符串重复替换的最快方法是什么
或者,也许有更有效的方法来做这件事?从手册中,我发现:s//新的替代品。似乎打字太多了
寻找更好的答案。我快速玩了一些vim宏魔术,并想出了以下想法。。。我很抱歉这么长时间。我认为最好解释一下步骤 首先,将要重复的文本块放入寄存器中,我选择了寄存器z,因此当光标位于.tab行的开头时,我按下了z3Y选择寄存器z并拖动3行 然后我将我想要的一系列VIM命令作为zp:,%s/home/输入缓冲区。只需按i键并键入命令 这意味着 转到当前{}块的末尾, zp在寄存器z中粘贴文本副本, ,%s/home/有两个技巧 .,%确保替换适用于从.tab开始到结束}结束的所有内容,并且, 该命令不完整,即末尾没有一个,因此vim将提示我完成该命令 请注意,虽然%s///将对文件的每一行执行替换,但必须认识到%是范围1$的别名。使用1%作为范围会导致%用作“跳转到匹配括号”运算符,从而产生从当前行到%match结尾的范围。在本例中,它是块中的闭合大括号 然后,在将光标放在行首的上之后,我输入了qy$,这意味着将所有字符拉到行尾的寄存器q中。 这一点很重要,因为简单地用Y拖动行将在寄存器中包含回车符,并将导致宏失败 然后,我用@q执行寄存器q的内容,命令行提示我完成s/home/ 键入替换文本并按enter键后,寄存器z中粘贴的块出现在缓冲区中,替换已应用 此时,您可以通过简单键入@@重复最后一个@qq。您甚至不需要将光标向下移动到块的末尾,因为宏开头的将为您执行此操作 这有效地减少了将原始文本拉入、插入以及将两个手动替换命令执行到简单文本中的过程 完成后,可以安全地从编辑缓冲区中删除宏字符串 这是令人难以置信的vim-ish,可能会浪费一点时间来做正确的事情,但当你这样做的时候,它可以为你节省更多的时间
Vim宏可能是您正在寻找的技巧。是否:s//new replacement意味着重复上一次搜索,并替换为新文本?我经常使用/some模式,然后使用:s//newtext重复上一个/作为替换。@Dave是的,问题和答案经过编辑以反映。这就是我想要的,只是觉得打字太多了,所以要找一条像&。在手册中找不到。您可能不需要考虑搜索/替换。想想,家会把你留在正确的词,然后CW将改变这个词。下次粘贴三行时,按n重复搜索,按cw输入新文本。@Dave这是一个很好的思考方法。然而,就键入而言,它并没有真正超过:s//newtext&。这真是太有趣了!谢谢你的解释,我唯一不明白的是%,这不是指整个文件吗?为什么这里表示结束}?如果“%”在:命令中用作“范围”,则它是“1,$”的缩写。当它在正常模式下使用时,它意味着找到下一个括号,大括号,检查“匹配对”并跳到它的对面。因此,如果您在“{”之前,它将找到大括号并跳到“}”。如果您在大括号之间,它将找到结束大括号“}”,并跳到开始大括号yes。。向后你可以试试Tim Pope的::subversit/{home,foo}/{about,bar}