VIM:使用自定义函数作为shell的参数

时间:2010-09-21 19:30:01

标签: shell vim

我在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 个答案:

答案 0 :(得分:2)

  

然而,我不能让它执行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),只有在修改缓冲区时才会写入缓冲区。