modèle d'appel: path-to-programm visual-marked-text filetype directory
Comment appeler un programme externe à partir de vim avec du texte marqué comme param?
Exemple: "C:\Programme\WinGrep\grep32.exe" search-pattern *.sql D:\MyProject\build
modèle d'appel: path-to-programm visual-marked-text filetype directory
Comment appeler un programme externe à partir de vim avec du texte marqué comme param?
Exemple: "C:\Programme\WinGrep\grep32.exe" search-pattern *.sql D:\MyProject\build
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>
OK, sans "shellescape" cela fonctionne. Merci beaucoup! – JAVH
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
Je connais cette commande, mais j'appelle le programme externe avec plusieurs arguments comme vous pouvez le voir dans l'exemple. – JAVH
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).
Vous pouvez tirer sur le texte sélectionné avec y et le coller dans la ligne de commande:
: cmd Ctrl-R" [autres params]
Avez-vous besoin de remplacer le texte sélectionné par la sortie du programme? –
Non, je ne remplacerais pas le texte sélectionné. – JAVH