我正在尝试在Vim中编写一个简单的函数,以返回PowerShell命令的结果。但是,我一直得到一些乱码的结果。
我认为这可能是一个编码问题,但是你会发现这个问题很奇怪,因为它“有点工作”。然而,我没有任何解决这个问题的方法。
在Vim中设置以下非默认shell选项:
以下内容将被写入我的缓冲区:
结果看起来正确。
我尝试修改我的原始函数如下:
但结果完全相同(即它们包括^@^@符号和其他无意义字符)。
我猜想发生的情况是,使用>重定向的powershell命令生成utf-16输出,而vim无法处理此类输出。我从powershell中获得以下内容(在此情况下,文件是gnu32程序):
我也尝试了调整 $OutputEncoding,但没有成功,就像这里所描述的那样: http://blogs.msdn.com/b/powershell/archive/2006/12/11/outputencoding-to-the-rescue.aspx 有人知道我在这里做错了什么吗?
我认为这可能是一个编码问题,但是你会发现这个问题很奇怪,因为它“有点工作”。然而,我没有任何解决这个问题的方法。
在Vim中设置以下非默认shell选项:
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
我得到了我所期望的结果(即ls命令在powershell中的结果)。 更有趣的是,当我运行以下命令时:
: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 有人知道我在这里做错了什么吗?