Questions tagged «substitute»

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

3
用纯vimscript代替(不带`:s`)
我的vimrc中有以下内容: func! AddSpaceBeforeEqual() s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge endfunc 我正在使用vint整理我的vimrc,并收到以下警告: ProhibitCommandWithUnintendedSideEffect 避免具有意外副作用的命令。避免使用:s [ubstitute],因为它会移动光标并显示错误消息。首选更适合脚本的函数(例如search())。对于许多vim命令而言,存在执行相同功能且副作用较少的函数。有关内置函数的列表,请参见:help functions()。Google Vimscript样式指南 但是,我不认为它们是不使用:s命令即可进行替换的方法。 例如,该search()函数提供与模式匹配的行,但是无法进行替换。该substitute()函数在字符串上操作,并且不能替代整个文件。 我应该自己实现替代方法,还是它们是重写我的函数的更明智的方式?

1
Vim全局替换不能代替一行中的所有匹配项
有时,我的全局专长不能替代一行中的所有匹配项。通过以下事实证实了这一点:当我进行确认替换时,可以看到它,在具有多个可能匹配项的行中找到一个匹配项,但随后转到另一行。 我使用g或gc参数对整个文件进行操作%。 在此文件上: hello hello hello hello hello hello hello 如果%s/hello/goodbye/g我知道 goodbye hello goodbye goodbye hello hello goodbye .vimrc关于搜索/替换,我只有 set hlsearch set ignorecase set incsearch
12 substitute 

1
如何用多行替代?
我想在多行中插入一个单词,是否有类似的命令 :[2,3,5,7,11]s/^/word\ /g 哪个会插入word第2行,第3行,第5行,第7行和第11行的开头? 在这里,多行不连续。

6
仅当文件末尾没有行时才如何在其末尾添加行?
我想通过添加一行来就地编辑文件,但前提是尚不存在以使我的脚本防弹。 通常我会做类似的事情: cat >> ~/.bashrc <<EOF export PATH=~/.composer/vendor/bin:\$PATH EOF 也可以通过ansible(line+ insertafter=EOF+ regexp)完成此操作,但这是另一回事了。 在vi / ex中,我可以执行以下操作: ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc 但是,然后如何在不重复同一行的情况下理想地检查该行是否已经存在(因此什么也不做)? 或者,也许在Ex编辑器中有一些更简单的方法?

4
将操作限制为一段代码
在我的日常工作中,有很多次我需要操作特定的功能,例如突出显示或搜索变量,但是我从未设法限制编辑/搜索的范围。 vim中是否有一种方法可以有选择地说,找到$color这些括号内的所有引用,或这种折叠等。如果可能的话,最好是相对通用的,以便可以将其应用于编辑/替换文本。 举个例子: $color = "#fff"; function PickColor () { $color = "#bbb"; $newColors = ["#000", "#fbf", $color]; foreach ($newColors as $c) { if ($c == "#fff") { break; } } } $differentColor = $color; 这段代码是一个相对较差的示例,但是,如果我需要替换$ color的所有实例,那么如何在函数PickColor的上下文中执行此操作。再举一个例子,使用#和*你可以去反对整个文件文本对象的下一个实例,你会如何限制了搜索只是这个功能(基本包搜索),其范围可以跨越成千上万行和输球您的位置,还是错误地替换了您不应该使用的其他功能?


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.