我在Windows XP中安装了wamp堆栈,按照这样的步骤运行PHP文件。
我已将{F8}映射到_vimrc
。
map <F8> :call Run() <cr>
function Run()
:cd C:\BitNami\wampstack-5.4.24-0\apache2\htdocs\test
:w temp.php
:silent !"c:\Program Files\Mozilla Firefox\firefox.exe" http://localhost/test/temp.php
endfunction
它可以成功运行。现在我想创建一个runphp
命令。当我输入
:runphp file1.php
在Vim的命令模式下,它会做这些事情。
C:\BitNami\wampstack-5.4.24-0\apache2\htdocs\test
file1.php
localhost
/test/file1.php 如何在Vim中编写用户定义的命令?
如何修改?为什么目标不是“http:// localhost
/ test /”添加fname?
Vim不会将目标解析为正确的文件。
function Runphp(fname)
:cd C:\BitNami\wampstack-5.4.24-0\apache2\htdocs\test
:w! fname
:let target ="http://`localhost`/test/" . fname
:silent !"c:\Program Files\Mozilla Firefox\firefox.exe" target
endfunction
command! -nargs=1 Runphp call Runphp(<f-args>)
我写了以下内容,其中undefined varible fname
?
_vimrc
:
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
set number
set langmenu=en_US
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=prc
let $LANG = "en_US"
set nowrap
set guioptions+=b
set modifiable
set write
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
behave mswin
set diffexpr=MyDiff()
function MyDiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
let eq = ''
if $VIMRUNTIME =~ ' '
if &sh =~ '\<cmd'
let cmd = '""' . $VIMRUNTIME . '\diff"'
let eq = '"'
else
let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $VIMRUNTIME . '\diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
function Runphp(fname)
cd C:\BitNami\wampstack-5.4.24-0\apache2\htdocs\test
execute 'w!' . fnameescape(a:fname)
let target ="http://localhost/test/" . filename
silent execute '!"c:\Program Files\Mozilla Firefox\firefox.exe"' shellescape(target, 1)
endfunction
command! -nargs=1 Runphp call Runphp(<f-args>)
答案 0 :(得分:2)
Vim的评估规则与大多数编程语言不同。您需要使用:execute
才能评估变量;否则,字面意思;即Vim使用变量名称本身作为参数。
此外,尤其是you've already asked about shellescape(),您需要使用转义功能,否则带有特殊字符的文件名/命令将无效。
函数参数需要在函数内部用 a:
sigil 引用。
最后,您不需要在函数中添加:
命令;只需要以交互方式进入命令行模式。
function Runphp(fname)
cd C:\BitNami\wampstack-5.4.24-0\apache2\htdocs\test
execute 'w!' . fnameescape(a:fname)
let target ="http://localhost/test/" . fname
silent execute '!"c:\Program Files\Mozilla Firefox\firefox.exe"' shellescape(target, 1)
endfunction
command! -nargs=1 Runphp call Runphp(<f-args>)