gpt4 book ai didi

powershell - system() 在 vi​​m 中使用 powershell

转载 作者:行者123 更新时间:2023-12-03 16:40:21 29 4
gpt4 key购买 nike

我正在尝试在 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

和回显出来的值正是我所期望的 - 但我仍然看到胡言乱语

我还尝试对我的函数进行以下修改:
function! Test()
let result = system("ls")
let conv = iconv(result, "utf-8", &enc)
call setline(1, conv)
endfunction

但结果完全相同(即它们包括 ^@^@ 符号和其他乱码)

我对正在发生的事情的猜测是使用 > 重定向的 powershell cmds 产生 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

任何人都知道我在这里做错了什么?

最佳答案

我终于想通了这一点。

对我的函数的以下修改几乎完全符合我的要求:

function! Test()
let @r = system("ls")
put! r
endfunction

我认为 Artomegus 是正确的,问题确实是回车,而不是编码问题。

作为旁注,当我的 .vimrc 文件中只有以下内容时,我遇到了问题:
set shell=powershell
set shellcmdflag=-c

当我运行 :call Test() 时仅使用这些设置,我会收到有关 Vim 无法读取临时文件的错误。

解决此问题的方法是将以下内容添加到您的 .vimrc 文件中:
set shell=powershell
set shellcmdflag=-c
set shellquote=\"
set shellxquote=

您必须将 shellquote 设置为\"并将 shellxquote 设置为一个空格(即空),因为默认情况下,在 Windows 上,shellxquote 设置为\",这会覆盖 shellquote 的值。这在使用系统函数时会出现问题,该函数在幕后运行 vimrun.exe 程序。

希望这对其他人有帮助。我已经坚持了很长时间,但现在 powershell 与 Vim 完美配合。

关于powershell - system() 在 vi​​m 中使用 powershell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7605917/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com