相关疑难解决方法(0)

将Powershell设置为Vim的shell:命令似乎没有正确传递

我正在尝试在 Windows 上的 GVIM 中将 Powershell 设置为 shell。

当我这样做时:!ls,我会看到一个vimrun.exe窗口,其中包含我正在运行的命令,该命令似乎什么也没做。它会保持这样,直到我关闭它。

vimrun.exe 输出


我的.vimrc配置:

set shell=powershell
set shellcmdflag=-command
set shellquote=\"
set shellxquote=
Run Code Online (Sandbox Code Playgroud)

没有什么会干扰它:当我这样做时,:verbose set shell? shellcmdflag? shellquote? shellxquote?我会得到上面设置的值。

当我删除vimrun.exefrom时%PATH%,我得到一个 Powershell 窗口,它是空的(其中没有输出),具有相同的行为。

命令本身很好 - 当我从 cmd 手动执行它时,它按预期工作。

当 Vim shell 设置为 cmd 时,一切都会按预期工作。

有些问题看似相关,但并不相同:

vim powershell

7
推荐指数
1
解决办法
6860
查看次数

system()在vim中使用powershell

我正在尝试在Vim中编写一个简单的函数来返回powershell命令的结果.不过,我在结果中不断受到喋喋不休.

我认为这可能是一个编码问题,但你会发现问题很奇怪,因为它"有点工作".但是我没有解决问题的方法.

使用vim中设置的以下非默认shell选项:

set shell=powershell
set shellcmdflag=-c
Run Code Online (Sandbox Code Playgroud)

鉴于以下功能:

function! Test()
   let result = system("ls")
   call setline(1, result)
endfunction
Run Code Online (Sandbox Code Playgroud)

当我运行时(来自C:\ Windows):

:call Test()
Run Code Online (Sandbox Code Playgroud)

以下内容写入我的缓冲区:

^@^@    Directory: C:\Windows^@^@^@    Mode            LastWriteTime   Length Name ^@-------
 ....continues
Run Code Online (Sandbox Code Playgroud)

但是当我运行以下命令时:

:r!ls
Run Code Online (Sandbox Code Playgroud)

我得到了我期望的结果(即ls的powershell结果)更有趣的是当我运行命令时:

:echo system("ls")
Run Code Online (Sandbox Code Playgroud)

结果看起来很正确

我尝试修改我原来的功能如下:

function! Test()
   let result = system("ls")
   echo result
   call setline(1, result)
endfunction
Run Code Online (Sandbox Code Playgroud)

回声的价值正是我所期待的 - 但我仍然看到了胡言乱语

我也尝试过以下修改我的功能:

function! Test()
   let result = system("ls")
   let conv = iconv(result, "utf-8", &enc)
   call setline(1, conv)
endfunction
Run Code Online (Sandbox Code Playgroud)

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

我猜测正在发生的是使用>生成utf-16输出重定向的powershell cmds,而vim无法处理这个问题.我从powershell得到以下内容(本例中的文件是gnu32程序):

PS> ls > …
Run Code Online (Sandbox Code Playgroud)

vim powershell

6
推荐指数
1
解决办法
828
查看次数

标签 统计

powershell ×2

vim ×2