Questions tagged «replace»

用于覆盖文本的命令或模式。对于搜索和替换操作,请使用[substitute]标签。

4
在正常模式下如何用拉动的单词替换单词
当我不得不用一个我以前想过的单词替换一个单词时,我通常使用对我来说似乎不自然的工作流程: 假设我有这段文字: foo bar buzz 我想拉动foo并替换bar为以前拉过的东西。 拉动之后foo,我看到以下选项: 选项1 将光标放在bar与w 把foo前面的bar有P 将光标放在b其余的上,bar然后用删除该单词de 选项2 将光标放在 w 使用de来擦除bar 将寄存器0的内容放入"0P(因为我已经擦除了bar,foo所以不再可以通过简单的来访问它p) 这两种方法对我来说似乎都过于复杂,我敢肯定有一种更有效的方法来完成此操作,但我找不到方法。这个想法是只将delete和put动作组合在一起,或者至少避免将已删除的单词保留在yank寄存器中,这样我就可以将所需的单词简单地放入p。 我也知道替换模式触发了,R但是它不允许放置被拉的东西。 TL; DR:如何用yank寄存器的内容替换单词?

2
用当前行号替换模式
我想用当前行号替换此文件中的“ x”。也就是说,改变 x x x 至 1 2 3 现在,我使用Perl一线式: perl -pi -e '$x=$.; s/x/$x/' myfile.txt 我认为UltraEdit可以通过垂直选择和替换来实现。可以在vim中完成吗?(我的示例在这里假设'x'在一行中全部存在。但是实际文件中的行要复杂得多。)

2
如何部分替换所选文本块中的文本?
为我的问题找到一个好标题并不容易。 我知道要在文本块前面插入: Ctrl- v 选择行 I 键入文本 ESC 现在,我想这样做,但也可以替换块选择中的一部分。目前我正在做两次手术 Ctrl- v 选择块 x 返回开始 接下来是我上面提到的顺序。 是否可以通过仅选择一次(Ctrl- v)块来组合这两个操作? 这是一个小例子: 我想转换以下块 1 text 2 text 3 text 4 text 5 text 进入 new text new text new text new text new text 只做一次“手术”。

3
如何在不进入插入模式的情况下替换多个字符
我有一个带有以下内容的行的文件: foofoo.xy.barbar 我想将更xy改为gh。我尝试做2r-> gh,但是显然不起作用,因为它替换为xy,gg然后将光标向左移动一个位置。 有没有一种方法可以在不进入插入模式或不使用更多击键的情况下进行此操作(例如:s/xy/gh/)?

3
如何有选择地更改突出显示的字符串?
通过搜索,我突出显示了要更改的字符串。现在,我只想替换突出显示的文本。我正在使用n前进到搜索字符串的下一个实例。我当时以为我可以做类似的事情,ciw但那会改变整个单词,而不仅仅是突出显示的文本。 我很熟悉,:%s/old/new/g但我不想更改所有实例。相反,我想将光标移到每个实例,然后决定是否更改它。
11 search  replace 

6
如何将每行的前四个字符复制到同一行的末尾?
给定一系列类似于以下内容的行: 2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. 有没有办法我可以抓住前四个字符(年份),然后将它们复制到行的末尾,使其看起来像这样: 2001 "Some Kind of …

3
替代搜索中的斜杠并替换长字符串
vim搜索和替换字符串是否有其他选择,而不必转义字符串中的每个特殊字符。 例如,如果我想匹配以下字符串并替换为某些内容 [ERROR] Login unsucessful 那我要做 :%s/\[ERROR\]\ Login\ unsucessful/something/g 对于包含很多特殊字符的复杂字符串,它变得更加难看和痛苦 我想做类似的事情 :%s/"[ERROR] Login unsucessful"/something/g 这样可以避免所有逃跑。有没有这样的功能?

3
是否有类似“不包含前导空白”的动作?
我a"经常在vim中使用该动作。例如,ca"在重构代码时使用,用变量名替换硬编码的参数。这种方法的问题是,a" 如果没有尾随空白,则包括前导空白: 包括任何结尾的空格,除非没有空格,否则包括前导空格。 因此,当我编辑这样的函数调用时: aFunction(arg1, "toBeReplaced", arg3) #original aFunction(arg1, replacedArg, arg3) #refactored 我必须先手动重新插入该空间,然后再将replacedArg其ca"删除。 是否有任何类似的动作不包含此空白,或者还有其他我可以使用的替代方式,ca"使我不必键入多余的空格? 笔记: cf"只要字符串不包含任何转义引号,它就可以执行我想要的操作,但是需要我将光标放在字符串的开头。我想要可以在字符串中的任何地方使用的东西,而且?"<Enter>cf"键入起来很尴尬。 <Space>与其说是一次击键,不如说是我经常起初常常忘记包含空格,这使我花费了至少四次额外的击键(bi<Space><Esc>)并破坏了我的注意力。因此,替换命令的长度并不重要,只要它仅删除给定字符之间的文本然后进入插入模式即可。

2
替换整个缓冲区的最有效方法?
目前,我有两种类似的方法可以用其他一些文本替换整个缓冲区(例如在剪贴板中)。 方法1: 删除所有行::%d。 粘贴文字:("+P或类似文字:):put+。 方法2: 直观地选择所有行:ggVG。 粘贴文字:"+P。 但是,我似乎找不到一种单指令射击的方式来做到这一点。我找到的最接近的是:change命令。但这似乎不适用于寄存器。当然,我可以创建一些功能和/或映射一个键来做到这一点。但是在进行所有这些自定义之前,我需要确保: 是否有一些内置命令将一系列行替换为其他文本?就像,您可以:%replace+用剪贴板中的文本替换整个缓冲区吗?

3
在选择或匹配项的每行中插入一个递增数字
我有一个问题,我可以想到两种通用的解决方法,但是我不知道这两种方法的具体细节。 ... Level 1: cũng also Level 1: và and Level 1: như like; such as Level 2: các plural marker Level 2: của belonging to ... 对于以“ Level n”开头的每一行,我想插入一个以“ 01”开头的数字。为了简单起见,让我们在数字前加上数字。 方法1:手动选择同一级别的所有行。调用魔术,我很快就会学习。 方法2:编写搜索并替换,以给定级别匹配所有行,在每个匹配项中,替换文本中均包含一个数字,该数字在每个匹配项中增加1。 我在StackOverflow或其他Vim站点上发现了类似的问题,但每个问题似乎都具有以下一个或多个问题: 关于插入当前行号,而不是插入任意但递增的号码。 不要将数字零填充。 在Windows 7上运行的Vim 7.4上的选择实际上不起作用(这些都会导致错误E481: No range allowed。) 我在Windows中使用mswin.vim运行gVim,但是最好在所有自定义Vim安装中使用的解决方案是最佳的。
10 macro  replace 

1
如何获得替代命令的预览?
我经常发现自己需要执行替换操作,该替换操作将使整个大文件中的匹配稀疏并且具有非平凡的搜索和替换表达式。 例如,说我有一些函数调用,例如okFunction(arg1, arg2 arg3)。当然,每个函数调用的args都会不同。现在说我发现了一个不需要的更好的功能arg2。我可以轻松地调整整个文件 :%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc 尽管从概念上讲很简单,但我不确定在这种较长的模式中语法是否正确。该c标志在这里确实有帮助,但是问题是当要求确认时,vim不会显示匹配项将被替换为什么。我的意思是,它将显示替换表达式,但不显示评估结果。如果我用确认替换y,vim会立即跳到下一场比赛,而且我也不会看我是否犯了任何错误。 我发现vim-over插件可以部分解决问题,但前提是您在键入命令时所有数学都在屏幕上可见。按下Enter键后,其行为与我上面描述的完全相同,并且没有得到预览。 因此,在要求对替代命令进行确认时,有没有办法使vim评估替代表达式?
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.