2014-07-24 3 views
1

Ma liste de vim:Comment utiliser une liste vim dans une commande python?

let ListRange = [] 
    let ListRange = ['2','3','hello'] 

Je veux importer la liste dans une commande python:

exe "r!python -c \"import random ; print('\\n'.join(format(random.choice(ListRange)) for i in range(14)))\"" 

Cela donne une erreur :
retraçage (appel le plus récent en dernier):
Fichier "", ligne 1, dans
Fichier "", ligne 1, dans
NameError: le nom global 'listrange' n'est pas défini

Comment puis-je utiliser la liste vim dans la commande ci-dessus python?

Je sais qu'il est possible de déclarer la liste dans la commande python self, mais je veux la déclarer depuis l'environnement vim.

Répondre

1

Avec :execute, vous devez faire une distinction entre les parties citées , qui sont évaluées par Python, et les parties non cotées, qui sont des expressions Vim. Votre erreur est que ListRange est une variable Vim, mais vous l'avez incluse dans la partie Python citée.

Pour résoudre ce problème, diviser la chaîne en deux parties, et insérez le ListRange littéralement et sans guillemets, en utilisant string() Vim pour générer une représentation textuelle de la liste:

exe "r!python -c \"import random ; print('\\n'.join(format(random.choice(" . string(ListRange) . ")) for i in range(14)))\"" 

Vous avez de la chance ici que Vim et Les formats de liste de Python sont très similaires; cela fonctionne seulement à cause de cela (pour cette entrée particulière, le contenu plus complexe de liste peut causer des échecs).

+0

Merci Ingo :) – Reman

+1

Content de pouvoir aider. Cette question était très claire et précise, et heureusement, elle avait une solution simple! –

Questions connexes