0

我正在尝试在列表中插入这些特殊字符:

let special_character = '[%!?(){}<>*+&:;^|#$€§°@\/[]=.,-_'"]'

像这样:

let list = []
call insert(list, special_character)

并用字符串过滤掉这个列表。体育

let string = '<()*'"'

使用:

let newlist = filter(copy(list), 'v:key =~# ".string."')

我知道我必须转义大多数特殊字符才能将它们插入列表或过滤掉它们,但是如何在列表中插入引号 (') 或双引号 (") 并将它们过滤掉?

4

1 回答 1

1

我不完全了解您想要实现的目标,但是:

  1. 将单引号加倍以在字符串或列表中处理它。
  2. 用于v:val过滤列表。v:key用于字典。

这里有一个可以帮助你的小例子。它不使用所有那些奇怪的字符,而是使用您要求的引号。将它们与管道连接以将它们作为单个ex命令执行:

:let special_character = 'abcd_''"'
:let list = split(special_character, '\zs')
:echo list
:let newlist = filter(copy(list), 'v:val =~# "''"')
:echo newlist[0]

它产生:

['a', 'b', 'c', 'd', '_', '''', '"']
'

请注意单引号是如何在列表中转义的,但不是在打印时。也是使用v:val. 要过滤双引号,只需用反斜杠将其转义(我不确定,但对其进行了测试)。还要注意我拆分了字符串,否则该filter函数只会对包含所有符号的字符串执行一次。这些方式将针对列表的每个元素运行。

编辑以添加双引号的示例:

:let newlist = filter(copy(list), 'v:val =~# "\""') | echo newlist[0]

它产生:

"
于 2013-07-02T16:54:26.523 回答