2010-01-04 5 views
36

J'ai finalement décidé d'essayer Vim, car je suis de plus en plus frustré par les éditeurs d'interface graphique. Jusqu'à présent, je l'aime, mais je ne trouve pas d'aide pour un problème que j'ai ...Ajouter une commande à Vim

J'essaie de mapper la commande :Pyrun à :!python % dans Vim en utilisant cmap. La cartographie apparaît très bien si je tape :cmap. Cependant, en tapant :Pyrun, j'obtiens ce message d'erreur:

Non un éditeur de commande: Pyrun.

Voici ce que je suis en train de Vimrc:

:autocmd FileType python :cmap Pyrun<cr> !python %<cr> 
:autocmd FileType python :cmap Intpyrun<cr> !python -i %<cr> 

Que puis-je faire pour résoudre ce problème?

+0

Lire les 42 pdf dans cette URL http: // Zmievski.org/talks/ –

Répondre

35

Je voudrais essayer quelque chose comme ça dans votre .vimrc ou votre ftplugin/python_ft.vim

command Pyrun execute "!python %" 
command Intpyrun execute "!python -i %" 

Alors :Pyrun et :Intpyrun devrait fonctionner

Vous pouvez ensuite mapper une touche de fonction à chaque

map <F5> :Pyrun<CR> 
map <F6> :Intpyrun<CR> 
+0

Ça marche! Merci! –

+2

Une commande buffer-local (-b) serait encore mieux. –

+0

pour ajouter la commande buffer-local, utilisez ': command -buffer' ...': la commande -b' ne fonctionne pas – tbhartman

24

Personnellement, je préfère une autre approche. Tout d'abord créer une fonction de réception des arguments de commande, puis créer une commande pour appeler la fonction:

fun! DoSomething(arg) "{{{ 
    echo a:arg 
    " Do something with your arg here 
endfunction "}}} 

command! -nargs=* Meh call DoSomething('<args>') 

Il serait comme

fun! Pyrun(arg) "{{{ 
    execute '!python ' . expand('%') 
endfunction "}}} 

command! -nargs=* Pyrun call Pyrun('<args>') 

Mais, il y a une meilleure façon de le faire dans vim. Utilisez makeprg:

makeprg=python\ % 

Il suffit de taper :make pour exécuter votre fichier Python en cours. Utilisez :copen pour afficher la liste des erreurs.

+0

Cela ressemble à une approche plus évolutive. Je ferai probablement quelque chose comme ça si j'ai besoin de plus d'une commande exécutée. –

6

G'day,

similaires à karoberts réponse, je préfère le plus direct:

:map <F9> :!python %<CR> 

Si mon script est de créer une sortie J'aime aussi capturer dans un fichier temporaire puis Autoread qui classe le contenu dans un autre tampon, par exemple

:map <F9> :!python % 2>&1 \| tee /tmp/results 

Je puis mis en Autoread en entrant :set autoread et ouvrir le fichier de résultats dans un autre tampon

:split /tmp/results<CR> 

Ensuite, je peux facilement voir les résultats de la course dans le tampon que l'auto rafraichit lorsque le fichier de résultats est mis à jour en exécutant le script en cours de développement.

HTH

acclamations,

Questions connexes