我使用单个函数(创建)来了解当前光标位置旁边的字符是否为空格
function Test_caractere_suivant_espace()
"Test si le caractère suivant est une espace"
let position = getcurpos()
let ligne = getline(position[1])
let car_suivant = ligne[position[2]]
if car_suivant == ' '
return 1
else
return 0
endfunction
效果很好......但仅限于Ascii字符,而不是UTF-8中的Ascii字符。
当然,我可以尝试当前字符的两个第一位的值,但无论如何在getline
返回的数组中都有UTF-8字符,而不是一个字节值的列表?
DJMcMayhem建议使用
解决方案 let ligne = split(getline(position[1]), '\zs')
但确定下一个角色仍有问题。 这是函数的新版本
function Test_caractere_suivant_espace()
"Test si le caractère suivant est une espace"
let position = getcurpos()
let ligne = split(getline(position[1]), '\zs')
let car_suivant = ligne[position[2]]
echom car_suivant
if car_suivant == ' '
return 1
else
return 0
endfunction
在这一行
α α α α α α α α α α
如果我在前一个α之前调用该函数,我得到
Error detected while processing function LB_content[2]..Test_caractere_suivant_espace:
line 4:
E684: list index out of range: 25
E15: Invalid expression: ligne[position[2]]
line 5:
E121: Undefined variable: car_suivant
E15: Invalid expression: car_suivant
line 6:
E121: Undefined variable: car_suivant
E15: Invalid expression: car_suivant == ' '
答案 0 :(得分:1)
不幸的是,我没有办法做到这一点。 :h getline
没有提及任何编码选项,而且从this vim mailing list I found开始,似乎这个问题已经存在了一段时间而没有修复。
然而,我确实找到了一个hacky解决方法。您可以使用字符列表来代替使用字符串。索引到它将为您提供整个字符而不是单个字节。试试这个:
let ligne = split(getline(position[1]), '\zs')