Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 如何用不同的字符串快速替换字符串模式?_Css_Vim - Fatal编程技术网

Css 如何用不同的字符串快速替换字符串模式?

Css 如何用不同的字符串快速替换字符串模式?,css,vim,Css,Vim,例如,我有许多HTML选项卡要设置样式,它们使用不同的类,并且具有不同的背景。背景图像文件的名称与类名相对应 我发现这样做的方式是yank: .tab.home { background: ...home.jpg... } 然后粘贴,然后:s/home/about 这将重复几次。我发现&可以用于重复最后一个替换,但只能用于相同的目标字符串。用不同的目标字符串重复替换的最快方法是什么 或者,也许有更有效的方法来做这件事?从手册中,我发现:s//新的替代品。似乎打字太多了 寻找更好的答案。我快

例如,我有许多HTML选项卡要设置样式,它们使用不同的类,并且具有不同的背景。背景图像文件的名称与类名相对应

我发现这样做的方式是yank:

.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}