vim脚本中的子串

时间:2018-06-09 16:48:31

标签: vim substring substr

是否有任何类似substr()的函数来获取vim脚本中的子字符串?如果不是这种任务的最佳替代品或替代品是什么?

4 个答案:

答案 0 :(得分:9)

它像python一样工作:

COUNT

详细文档:

echo '0123456'[2:4]
234

答案 1 :(得分:2)

对于多字节字符,还有:h strcharpart()

如果该功能在您以前的Vim风格中不存在,则可以使用例如模拟该功能

function! lh#encoding#strpart(mb_string, p, l)
  " call lh#assert#value(lh#encoding#strlen(a:mb_string)).is_ge(a:p+a:l)
  return matchstr(a:mb_string, '.\{,'.a:l.'}', 0, a:p+1)
endfunction

答案 2 :(得分:1)

取决于要字节范围还是字符范围。对于字节范围be及其str[b:e],但是对于字符范围,您将需要byteidx函数:

str[byteidx(str,b):byteidx(str,e+1)-1]

对于多字节字符,结果有所不同。

答案 3 :(得分:1)

VimL表达式mystring[a:b]返回一个从字节索引a到(并包括)b的子字符串。

但是请注意,语义与Python的subscript notation或Javascript的str.slice() 不同。特别是,VimL会计算字节数而不是用于索引的字符,并且包括范围末尾的字节(索引b处的字节)。

这些示例说明了行为的不同之处:

              VimL        Python
--------------------------------
s = "abcdef"
s[0]          a           a
s[5]          f           f
s[0:1]        ab          a
s[2:4]        cde         cd
s[-1:]        f           f
s[:-1]        abcdef      abcde
s[-2:-1]      ef          e

s = "äöü"
s[0:2]        ä\xc3       äö

还要在:help subscript:help expr-[:]上查找文档。