2014-09-22 21 views
1

我有一個nnoremapinoremapiab用我.vimrc所以我想以分解出字符串爲相同的字符串:變量這樣如何將vim s:variable轉換爲inoremap中的文字?

let s:timestr= '%F %T %Z' 
nnoremap <F5> "=strftime(s:timestr)<cr>P          
inoremap <F5> <C-R>=strftime(s:timestr)<cr> 
iab <expr> dts strftime(s:timestr) 

通過查看:help internal-variables,更具體地說,:help script-variable似乎腳本變量s:var不能用於映射。所以我想知道在處理inoremap時是否有辦法將s:timestr轉換爲文字。現在看起來它每次調用映射時都會嘗試「解析」s:timestr

回答

2

幾個思路:

  1. 您可以使:execute多一點點理解經由printf()插入變量。
  2. 您可以使變量成爲全局配置;這可能會在以後得到方便,並且有條件地遵循慣例if exists('g:plugin_timestr'),您正在尋找一個可發佈的插件。
  3. 如果這只是重構和避免重複,我會使用一個腳本中的本地函數:
function! s:Timestr() 
    return '%F %T %Z' 
endfunction 

您可以通過<SID>Timestr()而不是s:timestr使用,在您的映射。

0

一種選擇,altought醜陋是使用字符串連接和:exec

let s:timestr= '%F %T %Z' 
exec "iab <expr> dts strftime('" . s:timestr . "')" 

但它可以說是有一個醜陋的語法,難以閱讀。

相關問題