Estoy intentando escribir una función simple en Vim para devolver los resultados de un comando powershell. Sin embargo, sigo recibiendo un galimatías en los resultados.sistema() con powershell en vim
Creo que esto puede ser un problema de codificación, pero como verá, el problema es extraño ya que "funciona de algún modo". Aunque no tengo ninguna solución al problema.
Con las siguientes opciones de shell no predeterminados establecidos en vim:
set shell=powershell
set shellcmdflag=-c
Dada la siguiente función:
function! Test()
let result = system("ls")
call setline(1, result)
endfunction
Cuando corro (de C: \ Windows):
:call Test()
Lo siguiente se escribe en mi búfer:
^@^@ Directory: C:\Windows^@^@^@ Mode LastWriteTime Length Name ^@-------
....continues
Sin embargo, cuando ejecuto el comando siguiente:
:r!ls
le regreso exactamente lo que se espera (es decir, los resultados de PowerShell LS) Aún más interesante es cuando funciono con el comando:
:echo system("ls")
Los resultados parecen correctos
He intentado modificar mi función original de la siguiente manera:
function! Test()
let result = system("ls")
echo result
call setline(1, result)
endfunction
y el valor echo de salida es exactamente lo que esperaría, pero todavía veo galimatías
También he intentado la siguiente modificación a m función y:
function! Test()
let result = system("ls")
let conv = iconv(result, "utf-8", &enc)
call setline(1, conv)
endfunction
Pero los resultados son exactamente los mismos (es decir incluyen los símbolos^@^@ y otros galimatías)
Supongo que lo que está sucediendo es que los cmds de powershell que se redirigen utilizando> producen salida utf-16, y vim no puede hacer frente a esto. Me sale el siguiente de PowerShell (archivo en este caso es el programa gnu32):
PS> ls > test
PS> file test
test; Little-endian UTF-16 Unicode text, with CRLF, CR line terminator
También he intentado jugar con $ OutputEncoding, sin ningún éxito, como se describe aquí: http://blogs.msdn.com/b/powershell/archive/2006/12/11/outputencoding-to-the-rescue.aspx
Cualquiera ¿Tiene alguna idea de lo que estoy haciendo mal aquí?
¿La respuesta a esta pregunta ayuda? http://stackoverflow.com/questions/94382/vim-with-powershell – Rynant
@Rynant Revisé esa pregunta antes de publicarla, pero no pude encontrar nada allí que realmente me ayudara. Intenté el "truco" de ejecutar powershell a través de cmd como se describe en la respuesta de Nathan Hartley, pero me encuentro con el mismo problema. Creo que la raíz del problema es que el> operador de redirección en powershell escribe en un archivo en utf-16. Si pudiera encontrar una forma de obtener> ascii de salida, en su lugar, creo que eso resolvería el problema – actf
No creo que esté devolviendo unicode cuando se ejecuta en su función. Si fuera así, verías mucho más^@ caracteres. En cambio, lo que creo que está viendo son representaciones del carácter de retorno de carro (0x0d) que se incluyen en el terminador de línea estándar de Windows (CR LF). En cuanto a cuando estás en PowerShell, el redirector es en realidad una abreviatura de Out-File, que de manera predeterminada es unicode. Intente reemplazar los caracteres CR (\ r) con una cadena vacía antes de mostrar el resultado. – Artomegus