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