¿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?


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.


6

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

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

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.