2010-01-04 19 views
36

Alla fine ho deciso di provare Vim, poiché sono sempre più frustrato dagli editor della GUI. Finora, me ne sono innamorato, ma non riesco a trovare alcun aiuto per un problema che sto avendo ...Aggiunta di un comando a Vim

Sto cercando di mappare il comando :Pyrun-:!python % in Vim usando cmap. La mappatura si presenta bene se digito :cmap. Tuttavia, digitando :Pyrun, viene visualizzato questo messaggio di errore:

Non un comando di editor: Pyrun.

Qui è quello che sto cercando in Vimrc:

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

Cosa posso fare per risolvere questo problema?

+0

Leggi l'42 pdf in questo url http: // Zmievski.org/talk/ –

risposta

35

vorrei provare qualcosa di simile nel vostro .vimrc o il vostro ftplugin/python_ft.vim

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

Poi :Pyrun e :Intpyrun dovrebbe funzionare

È quindi possibile mappare un tasto funzione ad ogni

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

Funziona! Grazie! –

+2

Un comando buffer-local (-b) sarebbe ancora meglio. –

+0

per aggiungere il comando buffer-local, usare ': command -buffer' ...': il comando -b' non funziona – tbhartman

24

Personalmente preferisco un altro approccio. In primo luogo creare una funzione che riceve gli argomenti del comando e quindi creare un comando per richiamare la funzione:

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

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

Quindi sarebbe come

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

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

Ma, c'è un modo migliore per farlo in Vim. Utilizzare makeprg:

makeprg=python\ % 

basta digitare :make per eseguire il file Python corrente. Utilizzare :copen per visualizzare l'elenco degli errori.

+0

Sembra un approccio più scalabile. Probabilmente farò qualcosa del genere se avessi bisogno di più di un comando eseguito. –

6

G'day,

Simile a karoberts risposta, io preferisco la più diretta:

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

Se il mio script è la creazione di un output Mi piace anche a catturare in un file temporaneo e poi autoread che archivia il contenuto in un altro buffer, ad es

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

Ho quindi impostare AUTOREAD inserendo :set autoread e aprendo il file dei risultati in un altro buffer

:split /tmp/results<CR> 

Poi posso facilmente vedere i risultati della corsa nel buffer che automaticamente aggiorna quando il file dei risultati è aggiornato eseguendo lo script in fase di sviluppo.

HTH

applausi,

Problemi correlati