vim (neovim) Python 提要键中的转义序列
Escape sequences in vim (neovim) Python feedkeys
我希望能够使用 python 脚本在每个键的基础上控制 vim/neovim。 python vim 模块 (vim.feedkeys) 中有一个名为 feedkeys 的函数,它几乎就是我想要的。但是,我一直无法弄清楚如何发送功能键、箭头键、pgup、pgdown 等内容,因为它总是完全按照字面意思处理我的字符串。
根据 vim 的 feedkeys 的文档(vim脚本版本,而不是 python)
feedkeys("\<CR>") simulates pressing of the <Enter> key. But feedkeys('\<CR>') pushes 5 characters.
我用 python 对应物尝试过的东西没有用(注意,<CR>
只是一个例子;我知道我可以为此使用 \n。尽管如此,这应该模拟回车键):
vim.feedkeys("\<CR>")
vim.feedkeys("<CR>")
vim.feedkeys("\<CR\>")
vim.call("feedkeys", "\<CR>")
vim.call("feedkeys", '"\<CR>"')
所有这些都是按字面解释的。我想做类似的事情
vim.feedkeys("\<F5>")
等等。有什么想法吗?
很抱歉成为 Captain Obvious,但这不起作用,因为 Python 不是 VimScript。
有关完整示例,请参阅 :h nvim_replace_termcodes()
和 :h nvim_feedkeys()
。在 <CR>
的情况下,只需字节值 13 即可。
你不需要,因为像 "\<CR>"
这样的解释是 VimL 字符串文字的函数。换句话说,feedkeys("\<CR>")
与(可能)feedkeys("\x0d")
是一样的——函数看不出区别,解释发生在源代码级别。当然,Python 不具有相同的功能。
如果您不想弄清楚 F5 的转义序列是什么并将其编码到您的 Python 脚本中,也许您可以使用 vim.eval()
来评估 VimL 表达式,例如vim.eval(r'feedkeys("\<F5>")')
.
这并不理想,但它很好地解决了我的问题:
vim.command('call feedkeys("\<F5>")')
如果这对任何人都有用,我编写了一个通用函数来处理 \<>
转义和双引号:
def fkeys(text):
firstsub = True
for sub in text.split('"'):
if firstsub:
firstsub = False
else:
vim.feedkeys('"')
vim.command(f'call feedkeys("{sub}")')
我希望能够使用 python 脚本在每个键的基础上控制 vim/neovim。 python vim 模块 (vim.feedkeys) 中有一个名为 feedkeys 的函数,它几乎就是我想要的。但是,我一直无法弄清楚如何发送功能键、箭头键、pgup、pgdown 等内容,因为它总是完全按照字面意思处理我的字符串。
根据 vim 的 feedkeys 的文档(vim脚本版本,而不是 python)
feedkeys("\<CR>") simulates pressing of the <Enter> key. But feedkeys('\<CR>') pushes 5 characters.
我用 python 对应物尝试过的东西没有用(注意,<CR>
只是一个例子;我知道我可以为此使用 \n。尽管如此,这应该模拟回车键):
vim.feedkeys("\<CR>")
vim.feedkeys("<CR>")
vim.feedkeys("\<CR\>")
vim.call("feedkeys", "\<CR>")
vim.call("feedkeys", '"\<CR>"')
所有这些都是按字面解释的。我想做类似的事情
vim.feedkeys("\<F5>")
等等。有什么想法吗?
很抱歉成为 Captain Obvious,但这不起作用,因为 Python 不是 VimScript。
有关完整示例,请参阅 :h nvim_replace_termcodes()
和 :h nvim_feedkeys()
。在 <CR>
的情况下,只需字节值 13 即可。
你不需要,因为像 "\<CR>"
这样的解释是 VimL 字符串文字的函数。换句话说,feedkeys("\<CR>")
与(可能)feedkeys("\x0d")
是一样的——函数看不出区别,解释发生在源代码级别。当然,Python 不具有相同的功能。
如果您不想弄清楚 F5 的转义序列是什么并将其编码到您的 Python 脚本中,也许您可以使用 vim.eval()
来评估 VimL 表达式,例如vim.eval(r'feedkeys("\<F5>")')
.
这并不理想,但它很好地解决了我的问题:
vim.command('call feedkeys("\<F5>")')
如果这对任何人都有用,我编写了一个通用函数来处理 \<>
转义和双引号:
def fkeys(text):
firstsub = True
for sub in text.split('"'):
if firstsub:
firstsub = False
else:
vim.feedkeys('"')
vim.command(f'call feedkeys("{sub}")')