regex - Vim - 仅匹配文字字符串的第一个字符的模式

标签 regex vim

我正在尝试编写一个仅匹配按字面解释的字符串的第一个字符(可以是任何字符,也可以是空格)的模式。

因此,给定这个函数,它使用“非常没有魔法”来字面匹配作为参数给出的字符串,然后突出显示该字符串,我该如何修改它,以便它只突出显示第一个字符?

function! MatchFirst(i)
  highlight Red ctermbg=red ctermfg=0 guibg=#ff0000 guifg=#000000
  call matchadd('Red', '\V' . escape(a:i, '\'))
endfunction

例如调用MatchFirst('{^(sed')在以下文本中,只会突出显示 {如果{接下来是 *(sed ,但不在任何其他地方。目前它突出显示整个给定字符串 {^(sed .

Lorem ipsum do{^(lor sit amet, consectetur adipiscing elit, e{^(sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo con{^(sequat. Duis aute irure dolor in rep{^(rehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

稍后编辑

为了提供一些上下文,MatchFirst 的参数function 是用户视觉上选择的文本,因此它实际上可以是任何东西,可以是 foobar , foo\ze\bar , &#@!^><..?/\\\ , 国字字

最佳答案

在 Vim 模式中仅选择匹配部分的最简单方法是使用 \ze 来标记匹配的结束。请参阅:help /\ze了解更多详情。

您可以在“very nomagic”模式\V下直接使用\ze。您可以在 :help /\V 下找到它:

Use of \V means that after it, only a backslash and terminating character (usually / or ?) have special meaning: "very nomagic"

由于 \ze 已经以反斜杠开头,因此您根本不需要修改它即可在 \V 下工作。

{^(sed) 示例中,您可以使用 \V{\ze^(sed) 来匹配第一个 { 但仅当它是 {^(sed.

的一部分时

将它们全部放在您的函数中,您可以使用:

call matchadd('Red',
    \ '\V' .  escape(strcharpart(a:i, 0, 1), '\') .
    \ '\ze' . escape(strcharpart(a:i, 1), '\'))

注意:您可能会遇到 a:i 为空字符串的特殊情况,在这种情况下您可能需要执行不同的操作。

关于regex - Vim - 仅匹配文字字符串的第一个字符的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65011086/

相关文章:

regex - 使用明确编号的重复而不是问号、星号和加号

vim - GVIM : How can I run a command on a large number of buffers without needing user input?

vim - Command-T 不在当前工作目录中搜索

Java 模式匹配器组定义

java - 如何在java中进行preg_replace

node.js - 基于正则表达式递归重命名文件和文件夹

javascript - 从 URL 获取查询参数,该 URL 又具有一些带有查询参数的 URL

Java System.out.print();,在 Eclipse 上的行为与在 Eclim 上的行为不同

ruby-on-rails - Vim html.erb 片段? snipMate 需要一个 vim 提示

regex - 如何让vim显示^M并替换它