¿Es posible crear asignaciones con parámetros?

11

He creado algunas asignaciones de esta manera:

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

Ahora estoy buscando la posibilidad de crear una plantilla de mapa que me permita eliminar las partes redundantes obvias de mis asignaciones, algo así como

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

para poder pasar cualquier valor como parámetro a SomeFunc.

¿Existe tal posibilidad?

René Nyffenegger
fuente
77
Puedes usar input()o getchar(). Sin embargo, es probable que sea más normal usar un comando en lugar de una asignación para algo que toma un parámetro.
Peter Rincker
Estoy de acuerdo con el comentario de Peter; Los comandos se adaptan mejor al trabajo que las asignaciones.
romainl

Respuestas:

6

Como dijo @ peter-rinckler, probablemente sea más fácil hacerlo con un comando:

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

Hace posible hacerlo (en modo normal)

:Xyz ABC

Realmente no me gusta input()porque no puedes repetir ese tipo de cosas fácilmente.

edi9999
fuente
6

Gracias al comentario de Peter Rincker, he encontrado la respuesta:

:nnoremap <buffer> <leader> xyz :call SomeFunc(input('Param: '))<CR>
René Nyffenegger
fuente
He aquí otro ejemplo: nnoremap <silent> <leader>tn :exe "tabn" nr2char(getchar())<cr> . La idea es escribir <leader>tn2para navegar a la pestaña 2.
Jasha
1

Es posible que desee echar un vistazo a SnipMate , que tiene como objetivo proporcionar fragmentos similares a TextMate a vim. Resultó muy útil para mí, de todos modos.

Bet Lamed
fuente