Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 使用;z=”的;在映射中_Vim - Fatal编程技术网

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
添加它,所以这非常有效。谢谢!