抱歉,我第一次表达得不够清楚。实际上,我想问的是:在 Vim 中输入 :q 后是否有办法在不进一步输入命令的情况下返回到一个清空的终端界面。 我正在使用 Ubuntu 上的 VIM 7.4,终端类型是 xterm。
将以下内容添加到你的~/.vimrc文件中:
au VimLeave * :!clear
我使用别名来清除任何退出方法,包括:q
,:wqa
。(这是针对我的OSX二进制文件的,您需要找到自己的vim二进制文件,使用which vim
命令)
# .zshrc
alias vim="/usr/local/Cellar/vim/8.0.0094/bin/vim && clear"
clear
命令实际上并没有清除滚动缓冲区,除非定义了E3功能(在标准Ubuntu的bash中没有定义)。 - EntangledLoops.bashrc
文件中添加以下行,并注明原因:function vim { vim "$@" && clear; }
这样可以让你传递参数给vim
,但也会在任何方式退出vim
后清除终端屏幕。如果这不适用于zsh
或xterm
,我深表歉意! - LT 'syreal' Jones通过编辑.vimrc
文件,可以实现更多功能。
将以下内容添加到您的 .vimrc 文件中:
command Qc :call ClearAndExit()
function ClearAndExit()
:!clear
:q!
endfunction
使用:Qc
来退出... 它还会清除屏幕。
export TERM=xterm
,然后尝试相同的操作。 - manoj.vimrc
的更改。 - manojt_ti
和 t_te>(通常 Vim 会自动确定这些值)。详细信息请参见 :h xterm-screens
(以下是粘贴内容)。
(来自comp.editors,由Juergen Weigert回答一个问题)
:>另一个问题是,在退出vim后,屏幕保持不变,即我正在查看(编辑)的文件内容仍留在屏幕上。我的先前输出“ls”的结果丢失了,即不再在滚动缓冲区中。我知道有一种方法可以在退出vim或其他类似vi的编辑器后恢复屏幕,但我不知道如何操作。谢谢您的帮助。
:我想其他人可以回答这个问题。我假设vim和vi在给定的xterm设置下执行相同的操作。
它们不一定执行相同的操作,因为这可能是termcap与terminfo之间的问题。您应该知道,描述特定类型终端属性的两个数据库:termcap和terminfo。当条目不同时,这可能会导致差异,并且当涉及到一个程序使用terminfo而另一个程序使用termcap时,也会出现差异(请参阅+terminfo)。
在您的特定问题中,您正在寻找控制序列^[[?47h和^[[?47l。它们在xterms备用和主屏幕缓冲区之间切换。作为快速解决方案,像这样的命令序列
echo -n "^[[?47h"; vim ... ; echo -n "^[[?47l"可以实现您的要求。(我的符号^ [表示ESC字符,稍后您将看到数据库使用\E)。
在启动时,vim会将termcap变量ti(terminfo:smcup)的值回显到终端。退出时,它会回显te(terminfo:rmcup)。因此,这两个变量是上述控制序列应放置的正确位置。
比较您的xterm termcap条目(在/etc/termcap中找到)和xterm terminfo条目(使用“infocmp-C xterm”检索)。两者都应包含类似于以下条目:
:te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:
PS:如果您发现任何差异,则应该有人(您的系统管理员?)更好地检查完整的termcap和terminfo数据库的一致性。
注意1:如果您重新编译带有FEAT_XTERM_SAVE定义的Vim,则内置的xterm将包括上述的“te”和“ti”条目。
注意2:如果您想禁用屏幕切换,并且不想更改termcap,则可以将以下行添加到.vimrc中:
:set t_ti= t_te=
可以的。你完全可以这样做。
使用UNIX命令清除屏幕。
clear