我能否在vim键盘映射中使用环境变量?

3

也许有更好的方法,但这是我想做的。我有几个HTML文件需要在更新内容之前更新元标记。我试图通过使用类似以下键盘映射来自动化此过程:

nnoremap <leader>mt /<meta name="developer"<cr>f";;lct"$username

这似乎可以工作,但$username部分除外。我该如何使映射评估变量?

每页确实有一些标签需要更新,但我不知道还有什么其他方法可以做到这一点。如果有更好的方法,我很乐意听取建议。我要搜索的内容类似于以下内容:

<meta name="owner" content="someowner">
<meta name="developer" content="somedev">
<meta name="date" content="2012-07-26">
<meta name="expires" content="2013-07-26">

date是我打开文件进行编辑的日期,而expires则是从date开始一年后的日期。

注意:这是Windows上的gvim,如果有所改变请留意。

2个回答

4

$username 是指环境变量username,但要在映射中使用它,您必须遵循Vim的(有点不直观但完全一致的)解释规则。

ct"表示“更改到双引号”,因此接下来是插入模式。要插入环境变量(或任何其他Vim表达式),请使用<C-R>=

nnoremap <leader>mt /<meta name="developer"<cr>f";;lct"<C-R>=$username<CR>

这将在每次映射调用时评估环境变量。(并保持插入模式;追加<Esc>以返回正常模式!) 或者,您也可以将值嵌入到映射本身中:

execute 'nnoremap <leader>mt /<meta name="developer"<cr>f";;lct"' . $username

0

我不确定这是否是最佳解决方案,但对于Unix机器上的用户名,您可以从vim中调用'whoami'命令作为外部命令,并将其返回值存储在变量中以供以后重用。

对于日期,在vim中有一个strftime()函数。您可以为VimEnter事件添加自动命令,并在那时刻将时间/日期存储在变量中以供以后重用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接