以下是来自vim插件的vim脚本:
vim的语法有点奇怪:
!exists("*s:SetVals")
,为什么他们是s:
之前的星标?!
字符?&iskeyword
,这是一个变量,如果是,它定义在哪里?s:
和g:
,它们之间有什么区别?let &dictionary = g:pydiction_location
,我可以将其更改为&dictionary = g:pydiction_location
吗?if!exists(“* s:SetVals”)
function! s:SetVals() " Save and change any config values we need. " Temporarily change isk to treat periods and opening " parenthesis as part of a keyword -- so we can complete " python modules and functions: let s:pydiction_save_isk = &iskeyword setlocal iskeyword +=.,( " Save any current dictionaries the user has set: let s:pydiction_save_dictions = &dictionary " Temporarily use only pydiction's dictionary: let &dictionary = g:pydiction_location " Save the ins-completion options the user has set: let s:pydiction_save_cot = &completeopt " Have the completion menu show up for one or more matches: let &completeopt = "menu,menuone" " Set the popup menu height: let s:pydiction_save_pumheight = &pumheight if !exists('g:pydiction_menu_height') let g:pydiction_menu_height = 15 endif let &pumheight = g:pydiction_menu_height return '' endfunction
ENDIF
答案 0 :(得分:20)
1。
!exists("*s:SetVals")
,为什么他们之前是星标 S:
星号是存在函数的特殊语法,它意味着我们正在检查是否存在一个名为SetVals的现有函数。可以使用iskeyword
检查选项exists("&iskeyword")
,使用echo
exists(":echo")
请参阅:h exists(
2。
function!
,为什么会有!字符?
感叹号表示如果函数已经存在,则要替换该函数。
请参阅:h user-functions
3。
&iskeyword
,这是一个变量,如果是,它定义在哪里?
这是一个vim选项。您可以检查它是否设置为:set iskeyword?
4。什么是
s:
和g:
,它们之间有什么区别?
这些定义了以下符号的范围。 s:
表示该符号是脚本的本地符号,而g:
表示该符号将是全局符号。
请参阅:h internal-variables
和s:
,请参阅:h script-variable
5. 为什么要使用
let
?例如let &dictionary = g:pydiction_location, can i change it to be &dictionary = g:pydiction_location
?
Vimscript是需要使用关键字声明变量的语言之一。我不认为有一种方法比使用let
更容易声明变量。
答案 1 :(得分:6)
我可以回答一些问题,但我会从你最近提出的问题的一般评论开始。
大多数问题的答案在Vim非常详尽的文档中非常清楚地列出。如果你认真使用Vim,你必须知道如何使用它。从:help
开始,仔细阅读。它付出了代价。相信我。
您可以在:help expression
中找到所有这些子问题的答案。
!exists("*s:SetVals")
,为什么他们是s:
之前的星标?
请参阅:help exists()
。
function!
,为什么会有!
个字符?
如果您没有感叹号,如果您重新提供脚本,Vim将不会替换之前的定义。
&iskeyword
,这是一个变量,如果是,它在哪里定义?
这就是你在脚本中测试vim选项值的方法。请参阅:help iskeyword
。
什么是s:
和g:
,它们之间有什么区别?
这些是命名空间。请参阅:help internal-variables
为什么要使用let
?例如,让&dictionary = g:pydiction_location
,我可以将其更改为&dictionary = g:pydiction_location
吗?
不,你不能,:let
是你定义或更新变量的方式。习惯它。
答案 2 :(得分:3)
请参阅:help eval.txt
。它描述了大多数vimscript语法。