J'utilise une seule fonction (que créer) de savoir si le personnage à côté de la position actuelle du curseur est un espaceVim: getline et le caractère non ascii
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
Il fonctionne bien ... mais seulement avec des caractères Ascii , pas avec des caractères non ASCII en UTF-8.
Bien sûr, je pourrais essayer la valeur des deux premiers bits du caractère actuel, mais y at-il de toute façon des caractères UTF-8 dans le tableau retournés par getline
et non une liste de valeurs d'un octet?
Une pist de solution
DJMcMayhem suggèrent une solution à l'aide
let ligne = split(getline(position[1]), '\zs')
Mais il y a encore un problème pour déterminer le caractère suivant. Voici la nouvelle version de la fonction
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
Dans cette ligne
α α α α α α α α α α
Si j'appelle la fonction dans l'avant-dernier α, je reçois
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 == ' '
Merci pour cette réponse rapide. Malheureusement, il semble que cela ne fonctionne pas –
Je pense que c'est parce que je dois adapter la position du personnage actuel. 'let car_suivant = ligne [position [2]]' –
@ Maïeul Pouvez-vous clarifier ce qui ne fonctionne pas exactement? 'split (getline (n), '\ zs')' renvoie une liste de caractères, et l'indexer sur des positions non-ASCII retourne toujours des caractères non-ASCII, donc je ne suis pas sûr de ce qui ne fonctionne pas. – DJMcMayhem