2010-09-21 4 views
2

У меня есть следующий код в файле vim, который он автоматически генерирует при редактировании php-файлов. Но я не могу заставить его работать.VIM: Использование пользовательских функций в качестве параметров для оболочки

"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() 

Идея заключается в том, чтобы сделать ВИМ для автоматического создания правильного URL, так что я могу проверить код просто presing F9. Тем не менее, я не могу сделать это выполнить MakeThisUrl() и все это я получаю его

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

вместо

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

Любые идеи о том, как заставить его работать? Заранее спасибо

ответ

2

Однако, я не могу сделать это выполнить MakeThisUrl() и все это я получаю его
: Firefox -Новый-элементный MakeThisUrl()

Это не работает , потому что команда выполняется, как если бы она была напечатана. Попробуйте вместо этого:

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

Основные изменения: использование :execute, который выполняет команду в результате оценки выражения. Оценка выражений - это когда вызываются функции. Здесь его результат объединяется с ":!firefox -new-tab " и он запускается как команда Ex (команды, начинающиеся с :; для :execute ведущий : не является обязательным).

P.S. Небольшое изменение/nitpick: вместо :w используйте :up (или :update), который записывает буфер только в том случае, если он изменен.

+0

Большое спасибо, все прошло отлично. Не нужно было использовать execute для генерации команды. Спасибо за подсказку 'update', я буду применять его в других файлах, которые у меня есть на' au' – masterLoki

Смежные вопросы