我目前有以下自动命令(在我的vimrc中) -
autocmd BufEnter *.c nmap <F5> :Makexec<CR>
\:if findfile( expand("%:p:r").".exe" ,expand("%:p:h") ) != ""<CR>
\ :!%:p:r.exe<CR>
\:else<CR>
\ :vert topleft cwin<CR>
\ :vert resize 50<CR>
\:endif<CR>
我想转换此自动命令,使其执行单个字符串,其中字符串包含链接在一起的上述命令。
尝试1
let g:c_exe_str="Makexec | if findfile(expand(\"%:p:r\").\".exe\", expand(\"%:p:h\")) != \"\" | !%:p:r.exe | else | vert topleft cwin | vert resize 50 | endif"
autocmd BufEnter *.c nmap <F5> :execute g:c_exe_str<CR>
这没有像我预期的那样工作,我在shell上遇到以下错误 -
C:\ windows \ system32 \ cmd.exe / c D:\ NewFolder \ c_experiments.exe |别的| vert topleft cwin | vert resize 50 | ENDIF
&#39;否则&#39;不被识别为内部或外部命令,可操作程序或批处理文件。
尝试2
let g:c_exe_str="Makexec | if findfile(expand(\"%:p:r\").\".exe\", expand(\"%:p:h\")) != \"\" | echo system(expand(\"%:p:r\").\".exe\") | else | vert topleft cwin | vert resize 50 | endif"
autocmd BufEnter *.c nmap <F5> :execute g:c_exe_str<CR>
这种(原文如此)有效,但没有在shell窗口中显示可执行文件的输出;基本上它与原始自动命令的工作方式不同。
如何使用execute()完全模仿原始自动命令的步骤?
答案 0 :(得分:0)
在尝试1中,尝试将!%:p:r.exe
封装在exe
命令中:
... | exe "!%:p:r.exe" | else ...
否则,条形码以及:!
命令后的所有内容都将传递给shell。