Vim 使用;z=”的;在映射中
如果我在Vim 使用;z=”的;在映射中,vim,Vim,如果我在inoremap映射中使用[s1z=`]a(跳转到正常模式,查找以前的拼写错误,用第一个选项替换,跳回最后一次编辑并追加),一切正常。问题是我经常不想第一个拼写选择。如果我删除1,我将获得拼写菜单,但`]a似乎被吞没,并使我停留在仍处于正常模式的更正单词的第一个字符处。映射本身不应该寻找输入,因为z=本身应该处理菜单项。如果我手动运行这些命令(如果没有1,它会像预期的那样工作。我尝试过创建命名标记并跳回这些标记,但它似乎是z=,并且在它作为一件事被消费之后,所有的东西都会被使用。有人对如
inoremap
映射中使用[s1z=`]a
(跳转到正常模式,查找以前的拼写错误,用第一个选项替换,跳回最后一次编辑并追加),一切正常。问题是我经常不想第一个拼写选择。如果我删除1,我将获得拼写菜单,但`]a
似乎被吞没,并使我停留在仍处于正常模式的更正单词的第一个字符处。映射本身不应该寻找输入,因为z=
本身应该处理菜单项。如果我手动运行这些命令(如果没有1,它会像预期的那样工作。我尝试过创建命名标记并跳回这些标记,但它似乎是z=
,并且在它作为一件事被消费之后,所有的东西都会被使用。有人对如何在我选择拼写菜单后继续映射有任何建议吗?谢谢。我认为Vim停止处理正确的ha因为它不是一个完整的命令(必须在菜单中提供建议的索引才能使其完整),所以只要按下z=
,映射的第nd端就会显示出来。
:normal
命令也有同样的问题:
:norm[al][!]{commands}
{commands}
应该是完整的命令。如果
{commands}
没有完成最后一个命令
将中止,就像键入了
或
一样
或者,您可以调用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
ino=fix\u typo()
fu!s:fix_typo()中止
让拼写保存=&l:拼写
尝试
setl咒语
调用feedkeys(“\e\e[sz=,'int')
A组固定错误
哎呀!
au TextChanged*调用feedkeys('`]a',int')
\| exe'au!修复'u拼写错误'
\| 8月!纠正拼写错误
螺旋端
最后
调用计时器\u start(0,{->execute('let&l:spell='.spell\u save)})
末日
返回“”
恩德福
此代码使用C-j
键在插入模式下安装映射。如果不喜欢此键,可以使用其他键
映射调用s:fix\u typo()
函数,该函数:
- 临时启用
以避免错误“拼写”
E756
- 按键
提示建议Esc[s z=
- 在菜单中选择单词后,安装fire once autocmd,收听
以按TextChanged
`]a
- 恢复
“拼写”的原始值
timer\u start()
。然而,经过思考,我发现这通常意味着我不认为这个词是错的,而且确实想通过zg
添加它,所以这非常有效。谢谢!