Questions tagged «substitute»

任何涉及基于正则表达式的文本替换的操作,例如ex-mode`:s`命令。不要与[replace]标签混淆。

11
如何在Vim中查找和替换而不必键入原始单词?
我想优化Vim中的“查找和替换”工作流程。这是我经常做的事情,因为我敢肯定你们中大多数人也会这样做。通常- 复制块并在几个地方更改变量的名称。我知道,我知道,这可能会触发您“为什么要复制和粘贴代码”的反射,但我们不要走那条路了……有很多有效的用例:) 我非常了解搜索和替换命令::s或者,:%s但我不喜欢它们。它迫使我同时输入要搜索的完整变量名和要更改的变量名。也许有更好的方法来固定输入的数量:%s?我经常使用描述性长的变量名,因此对我来说确实是一个大问题。我也不喜欢从头开始输入变量名容易产生错字,并且会浪费时间和精力来查找错字。我更喜欢输入一次,然后复制和粘贴,以尽可能完全避免这种情况。 我当前的工作流程使用移动/拖动/选择/搜索/放置的某种组合来移动文件并一一替换。它虽然不是很好,但是具有避免输入完整的变量名的好处。我可能只需要输入前几个字母,/或者fx根据周围的情况使用另一个移动命令(例如),然后单击ve以选择整个单词。我也不介意必须为每个实例重复一次。如果没有确认每个更改,我永远不会做一个完整的替换。但是,如果我可以通过一次击键来重复替换操作(这种方法无法做到),那将是非常可取的。每次更换通常是这样的n,然后ve再p(或更糟"0p) 有没有更快的方法?

3
如何仅在视觉选择内替换?
如何使vim 仅替换视觉选择中的字符,而不替换行中的其他字符?例: 线: int arr[] = { 00 01 02 03 04 05 05 /* ... lots more like this*/}; 视觉选择: { 00 01 02 03 04 05 05 /*... lots more like this*/} 命令: :'<,'>s/\ /\,0x/g 预期: int arr[] = {0x00,0x01,0x02,0x03 /* and so on*/}; 但是,执行这些操作后,实际结果是: int,0xarr[],0x=,0x{0x00,0x01,0x02,0x03 /* and …

3
使用正则表达式查找和替换
我有一个带有一堆用户默认值的文件。我想更改一些文本,但是我在努力寻找匹配器和替换器。使用以下示例: ############################################################################### # Trackpad, mouse, keyboard, Bluetooth accessories, and input # ############################################################################### # Trackpad: enable tap to click for this user and for the login screen defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true 我想替换# Trackpad: ...为running "Trackpad: ..." 解决问题的方法是,我使用正则表达式测试器提出了一些建议: /\n\n#\s(.*)/g 如果我尝试在Vim中使用它,则对我不起作用: :/\n\n#\s(.*)/running "\1"/g 我想我的问题可以归结为两个具体问题: 如何避免搜索\n字符,而是确保#没有出现在搜索组的末尾? 如何有效使用捕获组? 以下是一些很好的答案。很难在这三者之间进行选择,但是我认为所选答案对于我的原始规格而言是最准确的。我建议您尝试使用实际文件中的所有三个答案,以查看您对它们的感觉。

1
如何非交互地编辑文件(例如在管道中)?
我想以非交互方式使用vim编辑在管道输入中传递的文件,或就地编辑文件(类似于sed)。 很少使用sed以下示例: $ sed -i'.bak' s/foo/test/g file # Edit file in-place. $ cat file | sed s/foo/test/g # Parse file in pipeline. 但是我可以在这里读到: sed是S tream ED管理员,不是文件编辑器。但是,各地的人们都倾向于滥用它来尝试编辑文件。它不编辑文件。 其次,一些选项,例如就地编辑(-i)是可移植的。 在vim中如何实现相同的功能?


2
替换字符串而不改变大小写?
由于我一起工作的领域特定语言的一个怪癖,我经常面临的(选择性,而不是全局)的任务更换term或TERM用word或WORD分别。 这意味着,我不区分大小写地搜索term,并希望将其替换为,word 同时保持原始大小写term不变。 由于检查全部的term为一致的大写/小写将是困难的,是不是真的有必要,我会满足于大/小写word/ WORD被决定的第一个字母term。 我怎样才能做到这一点?
18 substitute 




2
多选替代品?
通常,用c选项替代可以给我两个选择:(y)es或(n)o。是否可以有几个编号的是选项可供选择? 例 文件 person: Alice dog: Tobby person: Bob 模式1 :%s/person:/woman:/c 模式2 :%s/person:/man:/c 模式1和2具有相同的搜索模式,但具有不同的替换模式。我想将它们统一为一种模式,可以选择按(1)进行替换1,(2)进行替换2或按(n)进行不替换。
15 substitute 


4
如何用递增计数器替换每个匹配项?
我想用十进制数搜索并替换每次出现的某种特定模式,该十进制数1以每一个匹配项开始并以1递增。 我可以找到措辞类似的问题,这些问题原来不是关于增加计数器,而是将每个匹配项修改为固定的数量。其他类似的问题是关于插入行号而不是递增计数器。 之前的示例: #1 #1.25 #1.5 #2 后: #1 #2 #3 #4 我的真实数据中有很多要重新编号的文字。
14 substitute 

4
\ r和\ n在s命令中表示不同含义的原理是什么?
我们都知道,在搜索时\n是换行符,并且\r是回车符(^M),但是当替换\r是换行符时\n则是空字节(^@)。 这种不对称的根源是什么?鉴于这种行为是……至少可以说是怪异的(当您第一次出错时,它适得其反)我希望这是有一些奇怪的历史原因。 (顺便说一下,是否有某种方法可以“修复”此行为并获得更直观的效果?)

6
删除所有连续的重复项
我有一个看起来像这样的文件。 Move to 230.00 Hold Hold Hold Hold Hold Hold Move to 00.00 Hold Hold Hold Hold Hold FooBar Hold Spam Hold 我希望它看起来像这样: Move to 230.00 Hold Move to 00.00 Hold FooBar Hold Spam Hold 我敢肯定,vim必须有一种方法可以快速地做到这一点,但是我不太清楚如何做。这是否超出了宏的功能,并且需要vimscript? 另外,如果必须将相同的宏应用于“ Holds”的每个块,也可以。它不必是一个宏即可获取整个文件,尽管那真是太棒了。

1
在替代命令中用感叹号(!)替换斜杠(/)是什么意思?
我最近看到了一个替代命令,其中的作者被这样的命令/替代!::s!abc!ABC!g 我试图找到有关此用法的一些文档,但找不到任何相关内容。因此,我尝试自己进行实验,但我再也无法弄清两个标志之间的真正区别。这是我发现的: 这不是可以混合!和/中的命令。例如:s!abc/ABC失败。 !用来避免/在模式中转义可能会很有用。例如,如果要替换为</,%可以使用:%s!</!%!g代替:%s/<\//%/g。 似乎在某些情况下某些正则表达式无法使用/且不能正常使用,!但是由于我不是真正的正则表达式专家,因此我不确定。 所以我的问题很简单:!在替代命令中使用的优势是什么?何时应该决定使用替代命令/?
13 substitute 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.