Я пытаюсь написать в 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
Но результаты точно такие же (т. е. они включают символы ^ @ ^ @ и другие тарабарщины)
Я думаю, чтопроисходит то, что PowerShild команд, которые перенаправляются с помощью> производить вывод 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
У кого-нибудь есть идеи, что я здесь не так делаю?