vimscript:从vimscript / mapping生成可编辑的命令

时间:2013-07-24 08:52:54

标签: vim

我开始使用从this vim tiplvimgrep的映射来搜索文件下的当前单词:

map <F4> :execute "lvimgrep /" . expand("<cword>") . "/j **" <Bar> lw<CR>

我意识到我想在命令实际执行之前编辑文件glob路径或搜索模式。 例如:当光标在html文件中的javascript变量上时,按F4只搜索html文件中的变量。如果它形成命令并让我在执行之前编辑它会更好。 删除尾随<CR>按原样输出代码 - 命令窗口显示:

 :execute "lvimgrep /" . expand("<cword>") . "/j **" <Bar> lw

但这很难编辑。我实际上喜欢映射显示:

 :lvimgrep /theword/j *.js //---- cursor waiting here 

我已尽力而为但不知道如何去做 - 而vimscript并不容易。

PS:可能是Editable vimgrep string in command line

的欺骗行为

PPS :最终映射(我使用过<leader>*):

  nnoremap <expr> <leader>* ":lvimgrep /" . expand("<cword>") . "/j **/*." .  expand("%:e") . "\|lopen"

1 个答案:

答案 0 :(得分:2)

您可以使用:help map-expr代替:execute。这将计算表达式,然后将结果用作映射的右侧:

:nnoremap <expr> <F4> ":lvimgrep /" . expand("<cword>") . "/j **"

或者,您可以使用<C-r><C-w>插入当前单词:

:nnoremap <F4> :lvimgrep /<C-r><C-w>/j **

补充提示:You should use :noremap;它使映射不受重映射和递归的影响。