我想在Vim中编写一个简单的函数来返回powershell命令的结果。尽管如此,我仍然对结果不屑一顾。系统()与vim中的powershell
我认为这可能是一个编码问题,但正如你会看到这个问题很奇怪,因为它“有点作品”。虽然我没有任何解决方案。
随着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
和价值echo'ed了正是我所期望的 - 但我仍然看到胡言乱语
我也试过以下修改m y功能:
function! Test()
let result = system("ls")
let conv = iconv(result, "utf-8", &enc)
call setline(1, conv)
endfunction
但结果是完全一样的(即,他们包括^ @^@符号和其他乱码)
我的猜测是发生了什么事情是,使用>生成utf-16输出重定向的powershell cmds,而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
任何人有什么想法我在这里做错了吗?
这个问题的答案是否有帮助? http://stackoverflow.com/questions/94382/vim-with-powershell – Rynant
@Rynant在发布之前,我确实查看了这个问题,但是我找不到真正有帮助的东西。正如Nathan Hartley的回答中所描述的那样,我尝试了通过cmd运行powershell的“黑客攻击”,但我遇到了完全相同的问题。 我认为问题的根源在于powershell中的>重定向操作符在utf-16中写入文件。如果我能找到一种方法来获得>输出ascii,相反,我认为这将解决问题 – actf
我不认为它在运行时返回unicode。如果是这样,你会看到更多的^ @字符。相反,我认为你所看到的是包含在标准Windows行结束符(CR LF)中的回车符(0x0d)的表示。至于当你处于powershell本身时,>重定向器实际上是Out-File的缩写,它默认为unicode。尝试在显示结果之前用空字符串替换CR字符(\ r)。 – Artomegus