我有一个文件中的列表,假设我想将其发送到 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'