2014-09-22 23 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 . "')" 

但它可以说是有一个丑陋的语法,难以阅读。

相关问题