gpt4 book ai didi

vim - 在映射中使用 "z="

转载 作者:行者123 更新时间:2023-12-02 17:23:36 25 4
gpt4 key购买 nike

如果我使用<Esc>[s1z=`]ainoremap映射(跳转到正常模式,找到以前的拼写错误,将其替换为第一个选择,跳回上次编辑并追加),一切正常。问题是我经常不想要第一个拼写选择。如果我删除 1 我将看到拼写菜单,但 `]a似乎被吞没了,让我看到了仍处于正常模式的更正单词的第一个字符。映射本身不应该寻找输入,如z=本身应该处理菜单条目。事实上,如果我手动运行这些命令(没有 1 ,它会按预期工作。我尝试过制作命名标记并跳回这些命令,但似乎 z= 以及它之后的所有内容都被作为一个消耗事情。有人对我做出拼写菜单选择后如何使映射继续有任何建议吗?谢谢。

最佳答案

我认为 Vim 一旦按下 z= 就会停止处理映射的右侧。因为它不是一个完整的命令(您必须在菜单中提供建议的索引才能使其完整)。:normal命令有同样的问题:

:norm[al][!] {commands}

...

{commands} should be a complete command. If {commands} does not finish a command, the last one will be aborted as if <Esc> or <C-C> was typed.

作为替代方案,您可以调用 feedkeys()功能按z= 。例如:

ino <c-j> <c-r>=<sid>fix_typo()<cr>

fu! s:fix_typo() abort
let spell_save = &l:spell
try
setl spell
call feedkeys("\e\e[sz=", 'int')
augroup fix_typo
au!
au TextChanged * call feedkeys('`]a', 'int')
\ | exe 'au! fix_typo'
\ | aug! fix_typo
augroup END
finally
call timer_start(0, {-> execute('let &l:spell = '.spell_save)})
endtry
return ''
endfu

此代码使用C-j在插入模式下安装映射。 key 。如果您不喜欢这个 key ,可以使用另一个 key 。

映射调用 s:fix_typo()函数如下:

  • 暂时启用'spell'避免错误E756
  • 按下按键Esc Esc [s z=提示建议
  • 安装一次触发自动命令,监听 TextChanged按按键`]a一旦您在菜单中选择了一个单词
  • 恢复 'spell' 的原始值

关于vim - 在映射中使用 "z=",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com