2014-01-16 71 views

回答

1

縮寫觸發文本有限制:它必須是要麼的全ID端-ID,或非標識符型(基本上,該字符是關鍵字;參見:help abbreviations細節)。

對於C/C++文件類型,結腸:通常爲不是'iskeyword'一部分,這是造成在E474錯誤。因爲它是不建議使用該設置混亂(它會影響導航,語法高亮,等等),你不得不放棄/從縮寫代替它:

:ab stdmap std::map<string,int> 
+0

感謝[Ingo Karkat](http://stackoverflow.com/users/813602/ingo-karkat)的信息。 –

0

Using backslashes in vim abbreviations提出的解決方案應該能夠適應你的案件。你將不得不適應測試getline('.')[col('.')-2]=='\'getline('.')[:col('.')-2] =~ '.*std::$'(未經測試)

但是,說實話,你應該考慮使用代碼片段引擎,而不是很多。

+0

我也想過片段解決方法,但是:至少原始的snipMate不接受冒號,也不需要手動觸發,而不是自動替換縮寫。 –

+0

嗯,我仍然保持mu-template(根據使用的(可參數化)觸發器可以回看'\ k \ +'或WORD),我不知道snipMate(和兒子)可以或不可以做什麼確切地說 - 關於冒號,使用mu-template支持它也會很棘手。 ^^ 關於不需要觸發器的縮寫,是和否。大部分時間我們都會觸發'空間'來觸發它們。使用片段(至少使用mu模板),我們不需要輸入所有內容。 'ma '本來可以和'map '一樣有效。 –