是否有任何类似substr()
的函数来获取vim脚本中的子字符串?如果不是这种任务的最佳替代品或替代品是什么?
答案 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)
取决于要字节范围还是字符范围。对于字节范围b
至e
及其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-[:]
上查找文档。