Después de mirar en diversos repositorios y sitios webs al terminar descubrimos la solución que te enseñamos aquí.
Solución:
Es un truco, pero lo siguiente funciona en Vim 7.2. Tenga en cuenta que estoy ejecutando Powershell dentro de una sesión de CMD.
if has("win32")
set shell=cmd.exe
set shellcmdflag=/c powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned
set shellpipe=|
set shellredir=>
endif
function! Test()
echo system("dir -name")
endfunction
Probado con lo siguiente…
:!dir -name
:call Test()
Me encontré con un problema similar descrito por muchos aquí.
En concreto, llamar
:set shell=powershell
manualmente desde dentro de vim haría que powershell funcionara bien, pero tan pronto como agregué:
set shell=powershell
a mi archivo vimrc obtendría el error “No se puede abrir el archivo temporal …”.
El problema es que, de forma predeterminada, cuando se modifica el shell, vim establece automáticamente shellxquote en “, lo que significa que los comandos del shell tendrán el siguiente aspecto:
powershell -c "cmd > tmpfile"
Donde este comando debe verse así, para que vim lea el archivo temporal:
powershell -c "cmd" > tmpfile
Establecer shellquote en ” en mi archivo vimrc y desactivar shellxquote (es decir, configurarlo en un espacio en blanco) parece solucionar todos mis problemas:
set shell=powershell
set shellcmdflag=-c
set shellquote="
set shellxquote=
También intenté llevar esto más lejos y escribir un poco en vim usando la llamada system(): system() con powershell en vim
Sospecho que el problema es que Powershell usa la codificación String nativa para .NET, que es UTF-16 más una marca de orden de bytes.
Cuando se trata de canalizar objetos entre comandos, no hay problema. Sin embargo, es un PITA total para programas externos.
Puede canalizar la salida a través del archivo de salida, que admite cambiar la codificación, pero aún formatea la salida para el terminal en el que se encuentra de forma predeterminada (¡arrgh!), por lo que cosas como “Get-Process” se truncarán con puntos suspensivos, etc. Sin embargo, puede especificar el ancho de la terminal virtual que utiliza Out-File.
No estoy seguro de cuán útil es esta información, pero aclara un poco más el problema.
Si te sientes suscitado, tienes el poder dejar una sección acerca de qué te ha parecido este enunciado.