如何设置vimscript命令来调用函数?

时间:2015-09-03 06:22:57

标签: vim

所以我希望能够输入类似的内容:

:喂

在vim正常模式下然后让它回显'你好先生'。

我将下面的vimscript变成了一个插件,我收到了错误:

不是编辑命令

我做错了什么?

Vimscript中

if exists("g:hello_world") || &cp || v:version < 700 
  finish
endif
let g:hello_world=1 " your version number
let s:keepcpo = &cpo
set cpo&vim

fun! s:hellosir()
  echo 'hello sir'
endfun

command hello call hellosir()

3 个答案:

答案 0 :(得分:2)

定义你的函数(注意用户定义函数的大写字母):

:fun! Hellosir()
:    echo 'hello sir'
:endfun

现在打电话给:

:call Hellosir()
  

hello sir

也可以定义自己的ex命令:

:command Hello :call Hellosir()
:Hello
  

hello sir

修改

您可以将两者结合使用:使函数script-local并使用您的(global)ex命令访问它:

fun! s:hellosir()
  echo 'hello sir'
endfun
command Hello call s:hellosir()

答案 1 :(得分:1)

这条线有什么问题:

command hello call hellosir()

首先,来自:h user-cmd-ambiguous

  

所有用户定义的命令必须以大写字母开头,以避免   与内置命令混淆。例外是这些内置命令:

     
      
  • :Next
  •   
  • :X
  •   
     

它们不能用于用户定义的命令。 [...]

其次,您必须在该命令中使用s:前缀调用您的函数。

答案 2 :(得分:1)

steffen的答案是正确的,但这是一个带有参数的示例:

" a highlight color must be set up for the function to work
highlight blue ctermbg=blue guibg=blue

function! Highlight(text)
    :execute "match blue /" . a:text . "/"
endfunction

:command! -nargs=1 Highlight :call Highlight(<q-args>)

要运行它并突出显示所有出现的正则表达式:

:Highlight foobar

请注意,我尝试不缩写.vimrc中的命令/功能。保存在命令行输入时的缩写。