Tôi đang cố viết một hàm đơn giản trong Vim để trả về kết quả của lệnh powershell. Tôi tiếp tục nhận được vô nghĩa trong kết quả mặc dù.system() với powershell trong vim
Tôi nghĩ rằng đây có thể là sự cố mã hóa, nhưng vì bạn sẽ thấy vấn đề lạ vì nó "sắp xếp công việc". Tôi không có bất kỳ giải pháp cho vấn đề mặc dù.
Với các tùy chọn vỏ không mặc định sau đặt trong vim:
set shell=powershell
set shellcmdflag=-c
Với chức năng sau:
function! Test()
let result = system("ls")
call setline(1, result)
endfunction
Khi tôi chạy (từ C: \ Windows):
:call Test()
Phần sau được ghi vào bộ đệm của tôi:
^@^@ Directory: C:\Windows^@^@^@ Mode LastWriteTime Length Name ^@-------
....continues
Tuy nhiên khi tôi chạy lệnh sau:
:r!ls
tôi nhận được lại chính xác những gì tôi mong đợi (ví dụ: kết quả powershell của ls) Thậm chí thú vị hơn là khi tôi chạy lệnh:
:echo system("ls")
Các kết quả tìm kiếm chính xác
tôi đã cố gắng thay đổi chức năng ban đầu của tôi như sau:
function! Test()
let result = system("ls")
echo result
call setline(1, result)
endfunction
và giá trị echo'ed ra là chính xác những gì tôi mong đợi - nhưng tôi vẫn thấy gibberish
Tôi cũng đã thử sửa đổi sau đây thành m y function:
function! Test()
let result = system("ls")
let conv = iconv(result, "utf-8", &enc)
call setline(1, conv)
endfunction
Nhưng kết quả hoàn toàn giống nhau (tức là chúng bao gồm các ký hiệu^@^@ và các ngữ pháp khác)
Tôi đoán là điều đang xảy ra là các cmd được chuyển hướng bằng cách sử dụng> tạo ra đầu ra utf-16 và vim không thể xử lý điều này. Tôi nhận được như sau từ PowerShell (file trong trường hợp này là chương trình gnu32):
PS> ls > test
PS> file test
test; Little-endian UTF-16 Unicode text, with CRLF, CR line terminator
Tôi cũng đã thử chơi xung quanh với $ OutputEncoding, mà không cần bất kỳ thành công, như mô tả ở đây: http://blogs.msdn.com/b/powershell/archive/2006/12/11/outputencoding-to-the-rescue.aspx
Bất cứ ai có bất kỳ ý tưởng những gì tôi đang làm sai ở đây?
Câu trả lời cho câu hỏi này có hữu ích không? http://stackoverflow.com/questions/94382/vim-with-powershell – Rynant
@Rynant Tôi đã xem qua câu hỏi đó trước khi đăng bài, nhưng tôi không thể tìm thấy bất cứ điều gì trong đó thực sự giúp đỡ. Tôi đã thử "hack" của chạy PowerShell thông qua cmd như mô tả trong câu trả lời của Nathan Hartley, nhưng tôi chạy vào cùng một vấn đề chính xác. Tôi nghĩ rằng gốc của vấn đề là các nhà điều hành chuyển hướng trong PowerShell ghi vào một tập tin trong utf-16. Nếu tôi có thể tìm một cách để có được> để sản xuất ascii, thay vào đó, tôi nghĩ rằng sẽ giải quyết vấn đề – actf
Tôi không nghĩ rằng nó là trở về unicode khi chạy trong chức năng của bạn. Nếu có, bạn sẽ thấy nhiều hơn^@ ký tự. Thay vào đó, những gì tôi nghĩ bạn đang thấy là các biểu diễn của ký tự trả về (0x0d) được bao gồm trong trình tiêu chuẩn dòng Windows (CR LF). Đối với khi bạn đang ở trong powershell chính nó, các> redirector thực sự là viết tắt cho Out-File, mà mặc định unicode. Hãy thử thay thế các ký tự CR (\ r) bằng một chuỗi rỗng trước khi hiển thị kết quả. – Artomegus