将ex命令重定向到vim中的STDOUT
我正在尝试制作一个命令,将
vim的突出显示信息转储给STDOUT.我可以成功写入这样的文件:
vim +'redir >outfile' +'hi' +'redir END' +'q' 在此之后,outfile包含我想要的内容.但我宁愿输出到STDOUT来管道转换为突出显示信息的命令. 此方法尝试将命令重定向到寄存器,写入当前缓冲区,然后将该输出发送到tee. vim -E +'redir @a' +'silent! hi' +'redir END' +'put a' +'w !tee' +'q!' > outfile 这非常接近,但输出一个主要的分页消息(另外255行…)和一些ANSI转义废话.设置nomore并没有为我压制消息.我希望将第一个命令中发送到outfile的确切输出发送到STDOUT. 解决方法
Vim支持输出到stderr,我们可以将其重定向到stdout以解决您的问题.但是要小心,此功能仅用于调试目的,因此它有一些优势.这是一个如何做到这一点的简短草图.
首先,我们将以静默或批处理模式运行Vim,它使用-e -s标志( 我们不是将Ex命令作为命令行参数传递,而是使用-S来源脚本文件.使用以下内容创建hi.vim文件: verbose highlight
$vim -n -e -s -S hi.vim 不要跑这个,否则你会陷入无头Vim的黑暗中! 添加:quit命令并将stderr重定向到stdout: $vim -n -e -s -S hi.vim +quit 2>&1 瞧!现在根据你的心愿把这个烂摊子送到任何文件或工具中. 关于这个主题,有一篇非常详尽的维基文章“Vim as a system interpreter for vimscript”. 更精细的要点:由于Vim如何与终端环境交互,它无法在批处理模式输出中写入正确的unix LF行结尾.相反,它会写出看起来像CRLF行结尾的行结尾. 考虑添加一个过滤器来摆脱这些: $vim -n -e -s -S hi.vim +quit 2>&1 | tr -d 'r' | my-css-util 这回答了如何“将命令重定向到vim中的STDOUT”的一般问题,但它不一定适用于你的:hi问题,因为-e -s标志引起的这种约束:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Unix Shell范例精解---grep和sed练习题
- angularjs-directive – Angular UI select2指令 – 以编程
- 为什么Scala没有decltype?
- angular 动画 query用法
- angular – BrowserAnimationsModule和NoopAnimationsModul
- bootstrap v3学习笔记之组件
- AngularJS Transclusion Directive with ngRepeat导致混合范
- angular – 指令在子模块中不起作用
- active-directory – 如何从Active Directory服务器下载头像
- angularjs – 如何使用angular JS设置下拉列表控件的选定选