2015-04-06 104 views
0

我想用iab映射将时间标记插入到我的Tex文档中。 (这样我就可以知道转换票据时TEX文件到哪里寻找音符。)Vim中iab映射的奇怪行为

我试图定义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应该被插入?我该如何阻止它?

一切顺利,

-Linfeng

回答

2

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

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

+0

是的,我想这是在两个地方定义的递归'iab'映射('_vimrc'和'〜\ ftplugin \ tex.vim')导致问题。 [我使用了相同的映射'sj'来触发在不同设置中标记时间的动作。这是这种递归结构的起源。] – llinfeng 2015-04-12 03:00:38

+0

事实证明,将所有'iab'改为'inorea'并不能解决我的问题。按''将发出相同的垃圾输出,而按''来完成这项工作。我认为这个问题还没有部分解决。 – llinfeng 2015-04-12 20:20:49