15

我想知道是否可以在 Vim 中创建一个映射(用于正常模式),在映射执行之前允许用户输入。

我想为我最常用的 grep 命令创建一个快捷方式的映射。我希望该命令允许输入我正在搜索的内容,然后在输入时执行。

这就是我想要的:

nmap F :grep! "*user input*"<CR>:cw<CR>

我不知道如何暂停并接受用户输入。我什至以正确的方式思考这个问题吗?有没有更好的方法来做我想做的事情?

4

3 回答 3

16

有一个功能input(prompt [, text [, completion]])

结果是一个字符串,它是用户在命令行上键入的任何内容。{prompt} 参数可以是提示字符串,也可以是空白字符串(无提示)。可以在提示符中使用“\n”来开始新行。

(从:help input())。

对于类似的事情:grep!,您可能必须先使用字符串表达式构建命令,然后再使用:execute它。

于 2013-01-17T21:52:08.747 回答
8

另一种方法是创建自定义命令并使用映射来调用新命令。

command! -nargs=+ -complete=file -bar Grep grep! <args>|cw

现在您可以创建映射:

nnoremap <f2> :Grep<space>

您可能还想远离映射F键,因为它是一个非常方便的映射。

如需更多帮助,请参阅:

:h :command
于 2013-01-17T23:49:21.020 回答
0

另请参阅@EvergreenTree 在 vi​​.stackexchange 上的这个答案

简而言之:映射一个表达式以使用input()

nnoremap <expr> ;n "<ESC>Go<CR>" . input("Input your text here: ", "Prepend this string to my input by default -") . " <<- that was your input.<ESC>"

于 2018-08-23T08:03:17.727 回答