2012-09-28 17 views
8

Estoy escribiendo mi primer plugin vim (viml + python). Uno de los comandos que tiene el complemento es "GetStepCommand()" y básicamente recupera datos de un origen de datos remoto, masajeo un poco los datos y los copio en el búfer para que el usuario pueda comenzar a editarlos. Hay un parámetro que el usuario debe proporcionar a "GetStepsCommand" y que es la ruta de búsqueda donde residen los datos, por ejemplo:/projects/procedure/stepVim plugin - autocompletar personalizado de params en modo comando

Ahora esa ruta puede ser larga y es fácil señorita deletrear algo. Así que quería implementar mi propia finalización de pestañas para la parte del parámetro. Vim ya se encarga de autocompletar el comando tabulando, pero por supuesto no puede tener ningún conocimiento sobre cómo completar el parámetro (algo que voy a resolver por mi cuenta).

Pero primero necesito saber: - si/cómo puedo interceptar la pulsación de teclas en el mando en modo - FETCH/obtener la línea de comandos que el usuario está escribiendo - prueba de si está en modo comando o insert/view-mode - y finalmente devuelve una línea de comando actualizada (tab-completed) en la que el usuario puede continuar escribiendo en ':' después de la pulsación de tecla.

Cualquier punteros, consejos, artículos, tutoriales ... es decir, la información se aprecia grandemente

Respuesta

6

Cuando el argumento a su comando personalizado es una ruta del sistema de archivos, es simplemente una cuestión de añadir -complete=file a su definición :command, de esta manera:

:command -nargs=1 -complete=file MyCommand echomsg <q-args> 

no necesita de interceptar las pulsaciones de teclas en el modo de línea de comandos (y no deberían, por ello conduciría a malas interacciones con otros plugins!) Vim ofrece otras terminaciones por defecto (cp :help :command-complete.), incluso uno personalizado donde una función de Vimscript es invo ked para determinar los candidatos de finalización.

+0

Gracias por los consejos, los revisaré. Sin embargo, el argumento no es una ruta del sistema de archivos, sus datos (que describen una ruta en el DB) del sistema donde estoy extrayendo los datos en el búfer. Entonces, es por eso que tendré que hacer parte de mi propio proceso de autocompletado. –

+0

Gracias por la referencia a ": comando -completar" ... acaba de terminar de jugar con él ... no debería haber problema desde aquí. –

+2

@ KristofferNordström Una nota sobre este tipo de finalización en particular: '-complete = file' no es una opción de finalización además de su nombre. Hará que la finalización funcione para completar los archivos, ** ampliará las variables de entorno, evitará que escriba espacio sin escalar ** (normalmente con '-nargs = 1' y' MyCommand ab' argumento será 'ab'), ** amplíe los patrones y realice la expansión backtick ** (haciéndose eco de un error si estas expansiones dan como resultado más nombres de archivo de los que permite '-nargs'). Y ninguna de estas cosas se menciona en ayuda. – ZyX