我想知道在Vim中是否可以创建一个映射(用于普通模式),允许用户在映射执行之前输入。
我想为我最常用的grep命令创建一个快捷方式的映射。我希望命令允许输入我正在搜索的内容,然后在输入时执行。
这就是我想要的东西:
nmap F :grep! "*user input*"<CR>:cw<CR>
我无法弄清楚如何暂停和接受用户输入。我是否以正确的方式思考这个问题?有没有更好的方法来做我想做的事情?
答案 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>"