vim:函数中的未定义变量

Sea*_*ene 6 vim

我的.vimrc文件包括以下几行:

let read_path = '/var/www/html/readContent.html'
function ReadContentProcess()
    if (expand('%:p') == read_path)
        call feedkeys("\<C-A>")
        call feedkeys("\<C-V>")
    endif
endfunction
Run Code Online (Sandbox Code Playgroud)

当我运行时call ReadContentProcess(),出现以下错误:

Error detected while processing fucntion ReadContentProcess:
Line 1:
E121: Undefined variable: read_path
E15: Invalid expression: (expand('%:p') == read_path)
Run Code Online (Sandbox Code Playgroud)

为什么?我已经定义read_path为一个变量,为什么 vim 告诉我它不存在?

FDi*_*off 9

变量有一个默认范围。在函数外部定义时,它具有全局作用域g:。在函数内部,它有一个局部作用域l:。所以,你需要告诉你想通过其前缀VIM可变read_pathg:

let read_path = '/var/www/html/readContent.html'
function ReadContentProcess()
    if (expand('%:p') == g:read_path)
        call feedkeys("\<C-A>")
        call feedkeys("\<C-V>")
    endif
end function
Run Code Online (Sandbox Code Playgroud)

来自:help g:(及其后面的部分)

                                                全局变量 g:var g:
内部函数全局变量通过“g:”访问。省略这将
访问函数的局部变量。但是 "g:" 也可以用在任何其他
如果你喜欢的地方。

                                                局部变量 l:var l:
访问内部函数局部变量时无需预先添加任何内容。
但是你也可以在前面加上“l:”,如果你愿意的话。但是,不预先添加“l:”
您可能会遇到保留变量名称。例如“计数”。它本身
指的是“v:count”。使用 "l:count" 你可以有一个局部变量
一样的名字。