J'ai écrit ce script qui remplace de nombreux espaces autour du curseur par un espace. Cela ne fonctionne cependant pas quand je l'utilise sans espaces autour du curseur. Il me semble que Vim ne remplace pas sur un match de largeur nulle.Substitution de la correspondance de largeur nulle dans le script vim
function JustOneSpace()
let save_cursor = getpos(".")
let pos = searchpos(' \+', 'bc')
s/\s*\%#\s*/ /e
let save_cursor[2] = pos[1] + 1
call setpos('.', save_cursor)
endfunction
nmap <space> :call JustOneSpace()<cr>
Voici quelques exemples (tube |
est le curseur):
Cette ligne
hello | world
devient
hello |world
Mais cette ligne
hello wo|rld
ne devient pas
hello wo |rld
Mise à jour: En changeant la fonction à ce qui suit cela fonctionne pour les exemples ci-dessus.
function JustOneSpace()
let save_cursor = getpos(".")
let pos = searchpos(' *', 'bc')
s/\s*\%#\s*/ /e
let save_cursor[2] = pos[1] + 1
call setpos('.', save_cursor)
endfunction
Cette ligne
hello |world
devient
hello w|orld
Le problème est que les curseurs se déplace vers le caractère suivant. Il devrait rester au même endroit.
Des pointeurs et/ou des astuces?
J'ai modifié ma fonction de manière alternative (en calculant le nombre d'espaces avant le curseur avant de changer de ligne). – DrAl