gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:31:18 24 4
gpt4 key购买 nike

我正在尝试编写一个仅匹配字面解释的字符串的第一个字符(可以是任何字符,也可以是空格)的模式。
所以给定这个函数,它使用“非常没有魔法”来匹配作为参数给出的字符串,然后突出显示该字符串,我该如何修改它,所以它只突出显示第一个字符?

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 , &#@!^><..?/\\\ , 国字字 , ETC。

最佳答案

在 Vim 模式中只选择部分匹配的最简单方法是使用 \ze来标记比赛的结束。见 :help /\ze 更多细节。
您可以使用 \ze直接在“非常nomagic”模式下\V .您可以在 :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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com