我想在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