2015-04-06 133 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