用户输入的Vim映射

时间:2013-01-17 21:45:34

标签: vim

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

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

这就是我想要的东西:

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

我无法弄清楚如何暂停和接受用户输入。我是否以正确的方式思考这个问题?有没有更好的方法来做我想做的事情?

3 个答案:

答案 0 :(得分:13)

有一个函数input(prompt [, text [, completion]])

  

结果是一个String,它是用户输入的内容   命令行。 {prompt}参数是一个提示字符串,或者是一个   空字符串(无提示)。可以在提示符中使用'\ n'   开始新的一行。

(来自:help input())。

对于像:grep!这样的东西,你可能需要使用字符串表达式然后:execute构建命令。

答案 1 :(得分:8)

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

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

现在您可以创建映射:

nnoremap <f2> :Grep<space>

您可能还希望远离映射F密钥,因为这是一个非常方便的映射。

如需更多帮助,请参阅:

:h :command

答案 2 :(得分:0)

另请参阅this answer on vi.stackexchange by @EvergreenTree

简而言之:映射一个表达式以使用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>"