En la secuencia de comandos de Vim, no hay una forma diseñada de obtener la lista de las variables de entorno definidas actualmente . Sin embargo, es posible explotar la función de finalización de línea de comandos de Vim .
Considere posibles terminaciones para el siguiente comando inacabado.
:echo $
No es difícil ver que, de acuerdo con la sintaxis de script de Vim, todas las terminaciones son los nombres de las variables de entorno. Al pulsar la tecla wildchar
(Tab, por defecto) o Ctrl +D mostrará toda de ellos.
Para obtener esta lista de terminaciones dentro de un script, necesitamos superar su naturaleza interactiva. Un posible truco que consideramos aquí para hacer que, se basa en la combinación de características. El primero de ellos es el Ctrl + Un comando. En el modo de línea de comandos, este atajo activa la inserción de cada terminación disponible frente al cursor. Estas terminaciones se enumeran en orden alfabético y se separan con espacios.
Si hacemos Vim imprimir esas terminaciones insertados directamente en la línea de comandos, que podría fácilmente capturarlos mediante la reorientación de salida de comandos con el comando :redir
. Pero todo lo que necesitamos para lograr ese efecto secundario es citar el texto insertado con Ctrl +Un: cita crea el resto de nuestra :echo
comando de una cadena literal que se acaba de imprimir!
:echo 'NAME1 NAME2 NAME3'
NAME1 NAME2 NAME3
Para editar una línea de comandos de esta manera, un usuario puede escribir :ec
(un alias para :echo
) continuación $
, pulse Ctrl + Un, tipo '
, saltar al principio del comando con Ctrl +B, mueva el cursor sobre el signo del dólar pulsando ⇾ (flecha derecha) dos veces, eliminar esa $
e inserte '
en su lugar. La misma secuencia de pulsaciones de teclas se puede reproducir de forma no interactiva utilizando el comando :normal
.
Juntando todas estas piezas del rompecabezas, obtenemos la siguiente función.
function! Env()
redir => s
sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
redir END
return split(s)
endfunction
Para que este método funcione, Vim debe ser compilado con la característica +cmdline_compl
.
http://vim.wikia.com/wiki/Displaying_the_current_Vim_environment podría ser de ayuda – epsilonhalbe
Así ¿Está buscando una lista completa de heredadores de vim herederos, o está buscando todos los archivos que Vim crea por sí mismo (solo)? –
Hasta donde yo sé, no es posible hacerlo por medios Vim-only. Sin embargo, en los sistemas tipo Unix uno puede usar ':! Env'. –