Vim 中 iab 映射的奇怪行为

Weird behavior for iab mapping in Vim

我想使用 iab 映射将时间标签插入到我的 Tex 文档中。 (这样我就可以知道在将笔记转换为tex文件时在哪里寻找笔记。)

我试图在 c:\vim\vimfiles\ftplugin\tex.vim 中定义以下内容:

" iab mapping for inserting time stamps.
iab <buffer> sj % <c-r>=strftime("20%y-%m-%d %H:%M:%S")<cr><ESC>o

但是,在插入模式下按 sj<space> 会得到以下信息:

% 2015-04-06 09:23:48

i  sj            2015-04-06 09:23:48 

只有按下sj<CR>才会插入想要的输出:

% 2015-04-06 09:27:57
<blank line>
<cursor here, in insert mode>

有人知道为什么应该插入 suth i sj 2015-04-06 09:23:48 吗?我该如何阻止它?

祝一切顺利,

-临风

你提到你在c:\vim\vimfiles\ftplugin\tex.vim中定义了缩写,它似乎在Vim的安装路径中。您可能应该在用户目录中定义它,以避免在更新时丢失这些更改; Vim FAQ 26.1.

对此进行了解释

你的缩写在这里工作得很好。您的缩写可能会触发您设置的另一个缩写;您可以通过将 iab 替换为 inorea 来避免它。您还可以使用 :iab 列出所有现有缩写并使用 :imap 插入模式映射,以检查哪个可能会干扰。