如何将vim s:变量转换为inoremap中的文字?

时间:2014-09-22 11:12:47

标签: vim

我在nnoremap中使用相同的字符串inoremapiab.vimrc,因此我想将字符串分解为:变量如下< / p>

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无法在映射中使用。所以我想知道在处理s:timestr时是否有办法将inoremap转换为文字。现在看起来它试图解决&#34;每次调用映射时s:timestr

2 个答案:

答案 0 :(得分:2)

几个想法:

  1. 您可以通过:execute插入变量,使printf()更容易理解。
  2. 您可以将变量设为全局配置;以后可能会派上用场,并且习惯性if exists('g:plugin_timestr')有条件的,你就可以使用可发布的插件了。
  3. 如果这只是重构和避免重复,我会改为使用脚本本地函数:
  4. function! s:Timestr()
        return '%F %T %Z'
    endfunction
    

    您可以通过<SID>Timestr()代替s:timestr在映射中使用它。

答案 1 :(得分:0)

一个选项,altought丑陋是使用字符串连接和:exec

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

但它可以说是一种丑陋的语法并且难以阅读。