VIM: использование пользовательских функций в качестве параметров для оболочки - PullRequest
2 голосов
/ 21 сентября 2010

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

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

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

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

вместо

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

Есть идеи о том, как заставить это работать?Заранее спасибо

1 Ответ

2 голосов
/ 21 сентября 2010

Однако я не могу заставить его выполнить MakeThisUrl (), и все, что я получаю, это
:! firefox -new-tab MakeThisUrl ()

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...