我想知道是否可以在 Vim 中创建一个映射(用于正常模式),在映射执行之前允许用户输入。
我想为我最常用的 grep 命令创建一个快捷方式的映射。我希望该命令允许输入我正在搜索的内容,然后在输入时执行。
这就是我想要的:
nmap F :grep! "*user input*"<CR>:cw<CR>
我不知道如何暂停并接受用户输入。我什至以正确的方式思考这个问题吗?有没有更好的方法来做我想做的事情?
我想知道是否可以在 Vim 中创建一个映射(用于正常模式),在映射执行之前允许用户输入。
我想为我最常用的 grep 命令创建一个快捷方式的映射。我希望该命令允许输入我正在搜索的内容,然后在输入时执行。
这就是我想要的:
nmap F :grep! "*user input*"<CR>:cw<CR>
我不知道如何暂停并接受用户输入。我什至以正确的方式思考这个问题吗?有没有更好的方法来做我想做的事情?
有一个功能input(prompt [, text [, completion]])
:
结果是一个字符串,它是用户在命令行上键入的任何内容。{prompt} 参数可以是提示字符串,也可以是空白字符串(无提示)。可以在提示符中使用“\n”来开始新行。
(从:help input()
)。
对于类似的事情:grep!
,您可能必须先使用字符串表达式构建命令,然后再使用:execute
它。
另一种方法是创建自定义命令并使用映射来调用新命令。
command! -nargs=+ -complete=file -bar Grep grep! <args>|cw
现在您可以创建映射:
nnoremap <f2> :Grep<space>
您可能还想远离映射F
键,因为它是一个非常方便的映射。
如需更多帮助,请参阅:
:h :command
另请参阅@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>"