新VIM |E81:<SID>不在脚本上下文中使用



我正试图让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_bufCreate_term_buf
  • 如果您想从其他脚本(如compile_run_cpp(调用函数,请不要确定函数的作用域

最新更新