system () с powershell в vim

Я пытаюсь написать простую функцию в Vim, чтобы возвращать результаты команды powershell. Однако я продолжаю получать тарабарщину в результатах.

Я думаю, что это может быть проблема кодирования, но, как вы увидите, проблема странная, поскольку она «вроде работает». Но у меня нет решения проблемы.

Со следующими параметрами оболочки, не заданными по умолчанию в vim:

set shell=powershell
set shellcmdflag=-c

Учитывая следующую функцию:

function! Test()
   let result = system("ls")
   call setline(1, result)
endfunction

Когда я запускаю (из C: \ Windows):

:call Test()

В мой буфер записывается следующее:

^@^@    Directory: C:\Windows^@^@^@    Mode            LastWriteTime   Length Name ^@-------
 ....continues

Однако, когда я запускаю следующую команду:

:r!ls

, я получаю именно то, что я ожидал (то есть результаты powershell от ls) Еще интереснее, когда я запускаю команду:

:echo system("ls")

Результаты выглядят правильно

Я попытался изменить свою исходную функцию следующим образом:

function! Test()
   let result = system("ls")
   echo result
   call setline(1, result)
endfunction

и выведенное эхом значение - именно то, что я ожидал - но я все еще вижу тарабарщину

Я также пробовал следующую модификацию моей функции :

function! Test()
   let result = system("ls")
   let conv = iconv(result, "utf-8", &enc)
   call setline(1, conv)
endfunction

Но результаты точно такие же (т.е. они включают символы ^ @ ^ @ и прочую тарабарщину)

Я предполагаю, что происходит то, что командлеты powershell, которые перенаправляются с использованием>, производят вывод utf-16, и vim не может с этим справиться. Я получаю следующее от powershell (файл в данном случае - программа gnu32):

PS> ls > test
PS> file test
test; Little-endian UTF-16 Unicode text, with CRLF, CR line terminator

Я также безуспешно пытался поиграть с $ OutputEncoding, как описано здесь: http: / /blogs.msdn.com / b / powershell / archive / 2006/12/11 / outputencoding-to-the-rescue.aspx

У кого-нибудь есть идеи, что я здесь делаю не так?

6
задан actf 30 September 2011 в 04:22
поделиться