我正试图让g++作为函数:call
在vim>由于我不理解的某些原因,当我尝试执行s:compile_run_cpp()
函数时,vim会向我抛出E81错误。
function! s:compile_run_cpp() abort
let src_path = expand('%:p:~')
let src_noext = expand('%:p:~:r')
" The building flags
let _flag = '-Wall -Wextra -std=c++11 -O2'
if executable('clang++')
let prog = 'clang++'
elseif executable('g++')
let prog = 'g++'
else
echoerr 'No compiler found!'
endif
call s:create_term_buf('v', 80)
execute printf('term %s %s %s -o %s && %s', prog, _flag, src_path, src_noext, src_noext)
startinsert
endfunction
function s:create_term_buf(_type, size) abort
set splitbelow
set splitright
if a:_type ==# 'v'
vnew
else
new
endif
execute 'resize ' . a:size
endfunction
如果您使用的是自动加载而不是.vimrc
,则将函数名称更改为filename#function_name
,例如:如果文件名为compile.vim
,函数名称为compile_run_cpp
,则函数名称将为compile#compile_run_cpp
,则可以使用:call compile#compile_run_cpp()
轻松调用它
function! compile#compile_run_cpp() abort
let src_path = expand('%:p:~')
let src_noext = expand('%:p:~:r')
" The building flags
let _flag = '-Wall -Wextra -std=c++11 -O2'
if executable('clang++')
let prog = 'clang++'
elseif executable('g++')
let prog = 'g++'
else
echoerr 'No compiler found!'
endif
call s:create_term_buf('v', 80)
execute printf('term %s %s %s -o %s && %s', prog, _flag, src_path, src_noext, src_noext)
startinsert
endfunction
function s:create_term_buf(_type, size) abort
set splitbelow
set splitright
if a:_type ==# 'v'
vnew
else
new
endif
execute 'resize ' . a:size
endfunction
如果您使用.vimrc
尝试更改:
call s:create_term_buf('v', 80)
到此:
call <SID>create_term_buf('v', 80)
注:
- 其他程序员使用的函数命名转换。例如:
create_term_buf
至Create_term_buf
- 如果您想从其他脚本(如
compile_run_cpp
(调用函数,请不要确定函数的作用域