É possível criar mapeamentos com parâmetros?


11

Eu criei alguns mapeamentos como este:

: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>

que funciona como desejado.

Agora estou procurando a possibilidade de criar um modelo de mapa que me permita remover as partes redundantes óbvias dos meus mapeamentos, algo como

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

para que eu pudesse passar qualquer valor como parâmetro para SomeFunc.

Existe essa possibilidade?


7
Você pode usar input()ou getchar(). No entanto, é provavelmente mais normal usar um comando em vez de um mapeamento para algo que aceita um parâmetro.
Peter Rincker

Eu concordo com o comentário de Peter; Os comandos são mais adequados para o trabalho do que os mapeamentos.
romainl

Respostas:


6

Como o @ peter-rinckler disse, provavelmente é mais fácil fazê-lo com um comando:

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

Torna possível fazer (no modo normal)

:Xyz ABC

Eu realmente não gosto disso input()porque você não pode repetir esse tipo de coisa facilmente.


6

Graças ao comentário de Peter Rincker, encontrei a resposta:

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

Aqui está outro exemplo: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . A idéia é escrever <leader>tn2para navegar para guia 2.
Jasha

1

Você pode dar uma olhada no SnipMate , que visa fornecer snippets do tipo TextMate ao vim. De qualquer forma, provou-me muito útil.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.