2011-04-07 5 views
1

Comment vider un registre si l'utilisateur entre le nom du registre?Vider le registre dans vimscript

p.e.
let r = inputdialog(toregister)
let @r = ""

(r = caractère reçu de inputdialog)

Cela ne fonctionne pas non plus:
let @{r} = ""

+0

Ok, veuillez reformuler la question. 'si le registre est créé à partir de inputdialog' n'est pas clair par aucun effort d'imagination – sehe

Répondre

3
let r = inputdialog("which register do you want to empty?") 
exe 'let @'.r.' = ""' 

Ne pas oublier de tester r est un omble chevalier à long , et dans az plage (afin d'éviter l'injection de code)

+0

ou'/',' -', '" ', ... – Benoit

+0

@Luc, merci, cela fonctionne. Je ne comprends toujours pas pourquoi je ne peut pas utiliser {} pour créer une variable à la volée, comme pour les autres variables – Reman

+0

@Remonn: les registres sont limités Vous ne pouvez pas créer vos propres registres, les 26 caractères avec lettres, plus les registres à 10 chiffres, plus quelques registres spéciaux ('/', '" ',' _', '-',': ','. ','% ',' # ',' * ',' + ',' ~ ',' = 'qui est le plus spécial de tous) sont tous les registres disponibles. Voir ': registres d'aide'. Donc, il n'y a pas de registre que vous pouvez créer, supprimer, unlet ou manipuler en dehors de cette liste. – Benoit

4

Au lieu d'utiliser :execute et d'avoir à être au courant des injections de code, je vous suggère d'utiliser setreg fonction:

call setreg(tolower(r), "") 

tolower() est ici parce que si utilisateur fournit A comme un nom de registre alors une chaîne vide sera ajoutée à a registre au lieu de le vider.

setreg() prendra seulement le premier octet de r et si elle est le nom de registre valide, aucune erreur sera jeté (setreg("abc", "") videra registre a).

+0

belle solution! Je vous remercie. – Reman

+0

La solution de ZyX est bien meilleure que la mienne, quand 'setreg()' est disponible. –