2010-09-21 5 views
2

J'ai le code suivant dans un fichier vim qui est auto-généré lors de l'édition de fichiers php. Mais je ne peux pas le faire fonctionner.VIM: Utilisation de fonctions personnalisées comme paramètres pour le shell

"PHP config 
if !exists("g:addPath") 
    let g:addPath = 1 
    let $PATH=$PATH.';C:\Program Files\Mozilla Firefox' 
endif 

function! MakeThisUrl() 
    let s:url='http://localhost/' 
    let s:url=s:url. expand('%') 
    return s:url 
endfunction 

function! MakeCustomUrl() 
    let s:url='http://localhost/' 
    let s:url=s:url. expand('%:p') 
    return s:url 
endfunction 


map <F9> :w<CR>:!firefox -new-tab MakeThisUrl()<CR> 
map <F10> :!firefox -new-tab call MakeCustomUrl() 
imap <F9> <Esc>:w<CR>:!firefox -new-tab MakeThisUrl()<CR><CR> 
imap <F10> <Esc>:!firefox -new-tab call MakeCustomUrl() 

L'idée est de faire vim pour générer automatiquement l'URL correcte, donc je peux tester le code juste en presing F9. Cependant, je ne peux pas faire exécuter MakeThisUrl() et tout ce que j'obtenir sa

:!firefox -new-tab MakeThisUrl() <CR><CR> 

au lieu de

:!firefox -new-tab http://localhost/filename.php <CR><CR> 

Toutes les idées sur la façon de le faire fonctionner? Merci à l'avance

Répondre

2

Cependant, je ne peux pas faire exécuter MakeThisUrl() et tout ce que j'obtenir son
: Firefox (-Nouveau-onglet MakeThisUrl)

Cela ne fonctionne pas , car la commande est exécutée comme si elle était tapée. Essayez ceci:

map <F9> :up<CR>:execute ":!firefox -new-tab ".MakeThisUrl()<CR> 

Le changement majeur: l'utilisation de la :execute qui exécute la commande résultant de l'évaluation de l'expression. L'évaluation d'expression est lorsque les fonctions sont appelées. Ici son résultat est concaténé avec le ":!firefox -new-tab " et il est exécuté comme une commande Ex (les commandes commençant par le :, pour le :execute le : principal est facultatif).

P.S. La modification mineure/nitpick: au lieu de :w utilisez :up (ou :update) qui écrit le tampon seulement s'il est modifié.

+0

Merci beaucoup, cela a très bien fonctionné. N'a pas essayé d'utiliser execute pour générer la commande. Merci pour l'indice 'update', je vais l'appliquer sur d'autres fichiers que j'ai sur' au' – masterLoki