缺少:vim功能的endfunction错误

缺少:vim功能的endfunction错误,vim,Vim,在我的vimrc文件中,我试图编写一个函数,将两行数字作为参数,然后注释掉该范围内的所有行。我使用了一个替换行“^”的开头,并将其替换为“#”,当我从函数外部调用时,它可以正常工作。到目前为止,对于函数,我有以下内容: 函数注释(第1行,第2行) a:line1,a:line2s/^/#/g 端功能 但这不起作用,当我尝试启动Vim时,在您的命令中说'Missing:endfunction'时,出现了一个错误: a:line1,a:line2s/^/#/g 有些零件是变量(a:line1和

在我的vimrc文件中,我试图编写一个函数,将两行数字作为参数,然后注释掉该范围内的所有行。我使用了一个替换行“^”的开头,并将其替换为“#”,当我从函数外部调用时,它可以正常工作。到目前为止,对于函数,我有以下内容:


函数注释(第1行,第2行)
a:line1,a:line2s/^/#/g
端功能

但这不起作用,当我尝试启动Vim时,在您的命令中说'Missing:endfunction'

时,出现了一个错误:

a:line1,a:line2s/^/#/g
有些零件是变量(
a:line1
a:line2
)。需要对其进行评估。为此,您可以将命令的每个部分(变量除外)封装在字符串中,然后使用点运算符连接所有部分,最后将结果传递给命令
:execute
,以常规Ex命令的形式执行:

execute a:line1.','.a:line2.'s/^/#/g'
如果您需要一个命令来调用它,您可以尝试以下方法:

function! Comment(line1, line2)
    execute a:line1.','.a:line2.'s/^/#/'
endfunction

command! -range=% Comment call Comment(<line1>,<line2>)
要使用该函数,假设您希望注释地址介于10和20之间的行,可以执行:

:call Comment(10,20)

它与您的问题无关,但如果您不在关键字
函数中添加一个bang,每次您将为脚本编写源代码时,都会出现以下错误:

E122: Function Comment already exists, add ! to replace it
E174: Command already exists: add ! to replace it
对于命令也是一样,您可能希望在关键字
命令
后添加一个bang,否则会出现错误:

E122: Function Comment already exists, add ! to replace it
E174: Command already exists: add ! to replace it

我试过这样做,当我试着运行我的注释函数时,我得到一个错误:“E488:尾随字符”。我想既然我们已经将表达式放入字符串中,那么特殊字符是否必须转义?@user2802557我在执行此函数时没有此错误,您能在问题中发布您上次尝试的确切代码吗?@user2802557调用函数注释文件的前3行(作为示例),尝试执行
:调用注释(1,3)
。我编辑了答案以添加有关如何调用函数和命令的更多信息。使用命令
:Comment
会更短,因为它不是函数,因此您不必使用
:call
来调用它。如果您想要短于此,您可能需要一个映射来定义自定义运算符。有关更多信息,请参见
:hg@
,和/或阅读
艰苦学习Vimscript的第32至34章。以下是第1相关章节的url: