在vim中显示结果而不是X与不完整的映射

时间:2015-01-28 19:08:14

标签: vim keymapping

在我~/.vim/ftplugin/tex/insert.vim的文件中,我有以下映射

; <Nul> is ctrl-space
imap <Nul> \,
imap <Nul><Nul> ~
imap <Nul><Nul><Nul> \enspace
imap <Nul><Nul><Nul><Nul> \quad
imap <Nul><Nul><Nul><Nul><Nul> \qquad

这允许我通过按下ctrl-space来插入不同宽度的空格,每次按下都会使空白更长。当我输入第一个ctrl-space时,我得到一个X,它等着我看看我是否想要输入更多的ctrl-spaces或者如果我已经完成了。

我想知道是否有办法显示空间是什么,要么直接输入到缓冲区,要么再次按下它就更改它,或者将它放在状态栏中直到我完成。

我认为这可能的方法是检查光标前的字符是\,,如果它们是用下一个空格替换它,如果不是,请检查其余的空格我可以如果没有空格,则输入并最后输入\,。我只是不知道如何完成这样的键盘映射。

1 个答案:

答案 0 :(得分:1)

您当前的地图解决方案基于映射超时。在此之前,Vim正在等待更多输入,并且尚未插入任何内容。为了以后修改插入的内容,您需要完全替换方法。

这可以通过:map <expr> <Nul>实现,检查光标前的内容,然后返回<BS>个字符以擦除后面的替换文字。

使用mjbrownie/swapit插件,您将获得&#34;切换替代品&#34;功能(使用<C-a> / <C-x>)免费:只需将以下内容放入~/.vim/ftplugin/tex/swapit.vim

SwapList spaces \, ~ \enspace \quad \qqad

当您知道自己想要的内容(或初始插入内容)时,可以保留原始<Nul>映射以快速插入,并且稍后仅使用swapit进行修改。