Vim 和 Powershell - 将选择发送到命令

Vim 和 Powershell - 将选择发送到命令

我有一个文件中的列表,假设我想将其发送到 cmdlet sort(这只是为了描述目的,任何 cmdlet 都可以充当过滤器)

我的 vim shell 设置是:

set shell=powershell
set shellcmdflag=-command

我目前正在做的事情是:

:.,.+5w c:\out.txt| r !cat c:\out.txt | sort

这可行,但太冗长了,我不喜欢必须指定两次文件名。实际上,我想使用常规的 vim,:%!sort但它显示错误“E485-无法读取文件.../Temp/Vi..tmp”

使用以下方法进行外部排序也会失败:w !sort

powershell -command "sort <C:/Users/MMILIC~1.ITR/AppData/Local/Temp/VIi696.tmp"
...
The '<' operator is reserved for future use.

在这种情况下,问题是 PowerShell 不支持<重定向,但我没有在 vim 中看到任何可以配置它的选项(除了创建自定义命令和使用 VimL)。

答案1

没有<?没问题!使用 Vimssystem()功能!

Vim 帮助:

 system({expr} [, {input}])
 Get the output of the shell command {expr}...

对于排序,我特别推荐使用 Vims 的内部sort函数。(:h sort)大多数时候,我将它用于视觉选择:选择、:sort<CR>完成。

答案2

在过去的几个月里,我一直使用 PowerShell Core 作为 Linux 下的默认 shell,除了这个妨碍我体验的问题之外,它基本上是完美的,但幸运的是,今天经过多次搜索该问题后,我从这个答案中找到了解决方案:https://stackoverflow.com/a/37860059/1831096

基本上,通过禁用临时文件的使用,我们可以告诉 vim 使用管道,这在 PowerShell 中同样有效!把它放进你的程序中,你.vimrc会很高兴的!;)

set noshelltemp

欲了解更多信息,请阅读:http://vimdoc.sourceforge.net/htmldoc/options.html#'shelltemp'

相关内容