我真正喜欢的emacs 缓冲区(甚至ansi-term
、shell
和)的一项功能是能够将终端中的当前行“居中”,以便屏幕的上半部分仍然包含一些先前的输出。eshell
C-l
似乎标准(不确定标准的名称是什么)终端在C-l
按下时会将当前行移动到窗口顶部。有没有通用的方法将当前行移动到屏幕中心?如果没有,有没有办法专门针对 iterm2、终端或某些已移植到 OS X 的终端仿真器执行此操作?
答案1
大多数终端模拟器都可以“做到”这一点,但这需要一些工作:
- 假设您要移动的行位于屏幕底部。
- 如果您想向上移动该行,您可以通过向底行发送转义序列来滚动(或“索引”)该行,然后(计数!)将行向上移动您想要滚动的行数。
- 滚动会移动屏幕上的所有行。您可以通过设置滚动区域来限制移动的行数。通过这样做,您可以防止屏幕上半部分的线条消失。但是线的原始位置和目标之间的线将会消失。
这只会使队伍向上移动。同样,您可以使用“反向索引”向下移动一行。顺便说一句,这些操作不在标准ECMA-48,但是类似于 xterm(基于 DEC vt100)。 ansi-term
支持滚动/索引。
最后,这只是向上或向下。要向左/向右移动一行,您可以发送转义序列,以便在光标位于行开头时插入或删除字符。
这些转义序列记录在terminfo(5)
手册页中。我已经提到过这些:
csr
(设置滚动区域)
ind
(索引)
rin
(反向索引)
cup
(光标位置)
ich
(插入字符)
dch
(删除字符)
进一步阅读: