Vim:E523:此处不允许

问题描述 投票:1回答:1

我在vim中切换时收到此错误。

追踪(最近通话):中第1行的文件“ ”文件“ utils.py”,第15行,写入current_buffer.append('一些文本')vim.error:Vim:E523:此处不允许

我有当前的.vim文件

if expand("%:e") == 'xml'                                                                                                                                                             
    inoremap <expr> <tab> WriteFile()                                                                                                                                                 
endif                                                                                                                                                                                 
function! WriteFile()                                                                                                                                                                 
    python3 utils.write()                                                                                                                                                             
endfunction 

和此.py文件

import vim

def write():
    current_buffer = vim.current.buffer
    current_buffer.append('some text')
python vim-plugin
1个回答
0
投票

发生此问题是因为在评估映射的表达式时不允许您修改当前缓冲区。

请参见:help :map-expression,更具体地说:

要特别注意副作用!该表达式在获取字符,您很可能会使命令无法正常使用。因此,以下内容被阻止:

  • 更改缓冲区文本(:help :map-expression)。
  • 编辑另一个缓冲区。
  • textlock命令。
  • 允许移动光标,但是之后将其恢复。

如果您希望映射执行任何这些操作,请让返回的字符执行那。

您应该具有要插入的字符的功能[[return,或者考虑使用具有显式:normal的非<expr>映射。

对于前者,返回要插入的字符:

:call

inoremap <expr> <tab> WriteFile()
function! WriteFile()
    return py3eval('utils.write()')
endfunction
文件:

utils.py

或者,使用非def write():
    return 'some text'
映射的替代方法:

<expr>

(后者可能会有一些不良的副作用,因为您在修改缓冲区后将返回插入模式,但是您将返回到映射之前的位置。您可能需要考虑使用inoremap <tab> <C-O>:call WriteFile()<CR>
或类似的操作,以便在映射后移动光标。)
© www.soinside.com 2019 - 2024. All rights reserved.