如何在列表中插入引号?

时间:2013-07-02 16:14:50

标签: string list vim filter

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

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

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

并使用字符串过滤此列表。 体育

let string = '<()*'"'

使用:

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

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

1 个答案:

答案 0 :(得分:1)

我不完全明白你想要达到的目的,但是:

  1. 将单引号加倍以在字符串或列表中处理它。
  2. 使用v:val过滤列表。 v:key用于字典。
  3. 这里有一个可以帮助你的小例子。它不使用所有那些奇怪的字符,但它使用你要求的引号。使用管道连接它们以将它们作为单个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]
    

    它产生:

    "