【问题标题】:How to insert quotes in a list?如何在列表中插入引号?
【发布时间】:2013-07-03 01:00:08
【问题描述】:

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

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

像这样:

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

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

let string = '<()*'"'

使用:

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

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

【问题讨论】:

    标签: string list vim filter


    【解决方案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 函数只会对包含所有符号的字符串执行一次。这些方式将针对列表的每个元素运行。

    EDIT 添加双引号的例子:

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

    它产生:

    "
    

    【讨论】:

    • 感谢您的解释!
    猜你喜欢
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2021-01-08
    • 2014-11-09
    • 2013-07-02
    相关资源
    最近更新 更多