是否可以使用参数创建映射?


11

我已经创建了一些映射,如下所示:

:nnoremap <buffer> <leader>xyzABC   :call SomeFunc('ABC')<CR>
:nnoremap <buffer> <leader>xyzDE    :call SomeFunc('DE')<CR>
:nnoremap <buffer> <leader>xyzFoo18 :call SomeFunc('Foo18')<CR>
:nnoremap <buffer> <leader>xyzBar22 :call SomeFunc('Bar22')<CR>

可以按需工作。

我现在正在寻找创建映射模板的可能性,该模板将允许我删除映射中明显的多余部分,例如

:nnoremap <buffer> <leader> xyz? :call SomeFunc(?)<CR>

这样我就可以将任何值作为参数传递给SomeFunc

有这种可能性吗?


7
您可以使用input()getchar()。但是,对于带有参数的内容,使用命令而不是映射可能更正常。
彼得·林克

我同意彼得的评论。命令比映射更适合工作。
romainl

Answers:


6

正如@ peter-rinckler所说,使用命令可能更容易:

command! -nargs=* Xyz :call SomeFunc(<q-args>)

可以做(在正常模式下)

:Xyz ABC

我真的不喜欢这种方式,input()因为您无法轻易重复此类事情。


6

感谢Peter Rincker的评论,我找到了答案:

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>

这是另一个示例:nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> 。这个想法是键入<leader>tn2导航到选项卡
2。– Jasha

1

您可能想看看SnipMate,它旨在为Vim提供类似于TextMate的代码片段。事实证明,这对我很有帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.