2010-11-16 5 views

Répondre

4

La fonction suivante Vim-script peut être utilisé pour le faire.

function! FeedVisualCmd(cmdpat) 
    let [qr, qt] = [getreg('"'), getregtype('"')] 
    silent norm! gvy 
    let cmd = printf(a:cmdpat, shellescape(@")) 
    call setreg('"', qr, qt) 
    echo system(cmd) 
    if v:shell_error 
     echohl ErrorMsg | echom 'Failed to run ' . cmd | echohl NONE 
    endif 
endfunction 

Il copie texte sélectionné au registre sans nom (voir :help "") , exécute modèle donné de la commande par la fonction printf, puis exécute la commande résultant en écho sa sortie.

Si la seule partie de la commande que les changements est le modèle, il convient de définir une cartographie ,

vnoremap <leader>g :<c-u>call FeedVisualCmd('"C:\Programme\WinGrep\grep32.exe" %s *.sql D:\MyProject\build')<cr> 
+0

OK, sans "shellescape" cela fonctionne. Merci beaucoup! – JAVH

4

Vous sélectionnez le texte et puis tapez:

:!<program> 

Par exemple, pour trier les lignes, sélectionnez-les et tapez:

:!sort 

Notez que cela va remplacer le texte marqué t avec la sortie du programme externe

+0

Je connais cette commande, mais j'appelle le programme externe avec plusieurs arguments comme vous pouvez le voir dans l'exemple. – JAVH

0

Pour passer le texte en surbrillance en tant que paramètre, vous pouvez utiliser xargs sur linux/unix (ou Cygwin sur Windows) comme ceci:

:'<,'>!xargs -I {} path-to-program {} filetype directory 

Vous entrez cette commande en mettant en évidence texte en mode visuel, puis en tapant :, ! et en tapant le reste de la commande.

{} Une partie de la commande sera remplacée par l'entrée de la commande xargs qui est le texte en surbrillance. Donc path-to-program sera exécuté avec les paramètres requis dans le bon ordre (texte sélectionné en premier).

+0

J'ai besoin du texte marqué visuel comme premier argument, pas comme dernier argument. – JAVH

+0

Puis-je résoudre le problème avec une fonction Vim? Sans avoir à installer Cygwin. – JAVH

4

Vous pouvez tirer sur le texte sélectionné avec y et le coller dans la ligne de commande:

: cmd Ctrl-R" [autres params]

Questions connexes