use*_*776 18 linux macos terminal gnu-screen iterm
当我在终端工作时,我看到最后一个shell命令执行输出的历史.如果我运行vim,我会看到我打开全屏的文件.当我退出vim时,我可以再次看到最后一个shell命令的历史记录.
但是,当我从屏幕使用vim时.我看到我刚从vim退出时编辑的文件的足迹而不是最后一个shell命令的历史记录.我想看看shell的历史.
我怎样才能实现这种行为?
我用了:
到目前为止,我没有得到理想的行为.
PS
我用Google搜索了一下,看到了那些试图解决相反问题的人的评论:
你们中的许多人可能都知道基于控制台的程序的烦人行为,例如less或vi在退出后恢复屏幕,这样你刚才那里的文字就会消失.
这种行为背后的主要思想是程序是否使用备用屏幕来保存shell历史记录的图片并在vim退出时显示它.因此,如果想要解决相反的问题,他应该
Kei*_*son 23
更新:我忘记screen了默认情况下禁用备用屏幕支持的功能.
添加altscreen on到您$HOME/.screenrc的启用它.这可能是你所要做的; 所有的摆弄$TERM,$TERMCAP以及$TERMINFO可能是不必要的.无论如何,我会在这里留下其余的答案.
我已经把它放在我自己的.screenrc这么长时间里.
要为当前会话启用此功能,请键入您的screen转义字符(Cntrl-A默认情况下),然后键入:altscreen on Enter.
如果没有这个,screen即使它们在terminfo或termcap中定义,也不会响应转义序列.
vim(以及less大多数其他基于curses的全屏程序)使用终端的terminfo条目定义的smcup和rmcup字符串.(这些分别称为ti和te旧的termcap系统). smcup切换到备用屏幕,然后rmcup切换回主屏幕.
如果您的terminfo条目没有这些字符串,程序将无法执行此操作.
默认情况下,screen命令将您设置$TERM为"screen".显然,"屏幕"terminfo条目没有smcup和rmcup.
如果您想要黑客terminfo条目,您可以修改现有的"屏幕"信息来添加smcup和rmcup.您需要使用infocmp命令将您的terminfo转换为文本,并将tic其转换回terminfo使用的二进制形式.
一个更简单的解决方案是将$TERM环境变量设置为调用screen命令之前的任何变量.如今几乎所有终端仿真器都基于旧的DEC VT100,因此它们应该足够兼容.
在我的系统上,例如,当我登录时,我有TERM=xterm; 它可能是MacOS上的其他东西.在screen会话中,默认情况下,我有:
$ echo $TERM
screen
Run Code Online (Sandbox Code Playgroud)
我可以把它改成xterm这样:
$ export TERM=xterm
Run Code Online (Sandbox Code Playgroud)
(再次,用$TERM您系统上的任何内容替换"xterm" .)
你也可以添加
term xterm
Run Code Online (Sandbox Code Playgroud)
到你的$HOME/.screenrc.实际上screen有很多选项可以调整你的termcap/terminfo设置; man screen并为血淋淋的细节搜索"terminfo".