在以下情况下,Ex模式下的Vim很有用:
- 您需要非交互式地编辑(多个)文件(作为脚本的一部分)。
- 操作后,您的连接速度非常慢或屏幕未更新。
- 映射和缩写被禁用。
- 通用键,例如Escape或Control不能正常工作。
基本上vi
是可视模式,ex
因此Vim Ex Mode只是仿真ex
(它们仍然运行相同的代码),因此可以ex
从vi内进入命令模式,反之亦然。实际上有两种模式:Ex模式(vim -e
)和改进的Ex模式,与vi兼容的Ex模式(vim -E
)相比,它允许更多的高级命令。请参阅:Ex模式和改进的Ex模式有什么区别?
Ex是一族编辑者的根edit
,ex
和vi
。Ex是的超集ed
,最引人注目的扩展是显示编辑功能。例(1)
非交互编辑文件是最常见的用法,人们使用的方式与sed
和类似awk
,但它们更面向流-他们只从头到尾读取文件(它们不设计用于多行) )vim
面向缓冲区-您可以根据需要在文件中前后移动,因此功能如此强大。
基本上:
sed
是S tream ED管理员,不是文件编辑器。
但是,人们似乎滥用它来尝试编辑文件,事实是它不编辑文件。其次,它的诸如in-(-i
)之类的选项是非标准的FreeBSD扩展名,在其他操作系统上可能不可用。因此,如果您想避免代码不便,I / O开销和不良副作用(例如破坏符号链接),则应使用BashFAQex
,它是标准的基于UNIX命令的编辑器(以及ed
)。
我发现在Ex模式下有用的其他事情是将其用作游乐场(类似于python
控制台),在这里您可以连续执行许多命令,工作/调试正则表达式,检查vim配置,执行外部命令或使用寄存器等。 。
例如:
let @d = '<td></td>'
let @r = '<tr>' . repeat(@d, 5) . '</tr>'
echo @r
let @t = '<table>' . repeat(@r, 5) . '</table>'
reg
在Ex模式下,这比在普通模式下(您只能看到最后一条命令)要容易得多。
实际用法
我的别名如下.bash_aliases
:
alias trim="ex +'bufdo!%s/\s\+$//e' -scxa"
alias retab="ex +'set ts=2' +'bufdo retab' -scxa"
注意:使用bufdo
不是ex
POSIX兼容的方法(按照手册),因此您可以考虑将其与一起使用find
。所述!
用于强制切换缓冲器而不保存(否则警告生成)。
我用来修剪所有源文件中尾随空格的第一个,例如:
trim **/*.php
第二个将所有选项卡(递归)转换为空格,例如:
retab **/*.php
对我来说,使用retab
是足够的,但在描述一些缺点这里。添加更多内容-V
以增加详细度输出。
请注意,以上示例使用zsh / bash4 globbing(**
),因此请确保您的外壳程序支持它并启用了它。
有关更实际的示例(例如解析html文件),请检查:
也可以通过以下网址进一步了解Ex-mode:
Q
并且q:
完全不同。您是指Q
对吗?