1

我从这个 vim 提示的映射开始,用于lvimgrep在文件中搜索光标下的当前单词:

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:命令行中可编辑 vimgrep 字符串的可能重复

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

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

1 回答 1

3

您可以使用 a:help map-expr而不是:execute. 这将评估表达式,然后将结果用作映射的右侧:

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

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

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

附加提示:您应该使用:noremap; 它使映射不受重新映射和递归的影响。

于 2013-07-24T09:01:00.663 回答