Python Vim:E523:此处不允许
我在vim中单击tab时收到此错误 回溯(最近一次呼叫最后一次):Python Vim:E523:此处不允许,python,vim-plugin,Python,Vim Plugin,我在vim中单击tab时收到此错误 回溯(最近一次呼叫最后一次): 写入文件“utils.py”,第15行 当前缓冲区.append('some text') vim.error:vim:E523:此处不允许使用 我有当前的.vim文件 if expand("%:e") == 'xml'
写入文件“utils.py”,第15行
当前缓冲区.append('some text')
vim.error:vim:E523:此处不允许使用
我有当前的.vim文件
if expand("%:e") == 'xml'
inoremap <expr> <tab> WriteFile()
endif
function! WriteFile()
python3 utils.write()
endfunction
发生此问题的原因是,在计算映射表达式时,不允许修改当前缓冲区 具体见: 小心副作用!表达式是在 获取字符时,很可能会使命令无法正常工作。 因此,以下内容被阻止:
- 更改缓冲区文本()
- 编辑另一个缓冲区
命令:normal
- 允许移动光标,但随后将恢复光标
您应该让函数返回要插入的字符,或者考虑使用非<代码> <代码>映射,使用显式<代码>:调用< /代码> ./p> 对于前者,返回要插入的字符:
inoremap <expr> <tab> WriteFile()
function! WriteFile()
return py3eval('utils.write()')
endfunction
或者,使用非映射的替代方法:
inoremap <tab> <C-O>:call WriteFile()<CR>
inoremap:callwritefile()调用
(后者可能会有一些不必要的副作用,因为在修改缓冲区后,您将返回到插入模式,但是您将返回到映射之前的相同位置。您可能需要考虑使用<代码> SETPOSE()/代码>或类似于在映射之后移动光标,如果需要的话)。
inoremap <tab> <C-O>:call WriteFile()<CR>