Ctrl-Z
我发现不断按下然后fg
在这些屏幕之间切换(其中命令终端是您用来调用的命令行)很烦人vim
。它还会fg
在我的控制台上生成不需要的行。我很确定这是可以做到的,因为我记得我在大学时做过,但我不记得如何做到。
有关终端的信息及其与 vim 的关系
vt100 终端和其他终端有一种方法可以在更改屏幕之前保存屏幕,然后可以在需要时恢复它。 执行此操作后,如果您进入然后脱壳或退出vim
,就可以看到。大多数时候,它会通过在绘制屏幕之前保存屏幕来显示进入之前屏幕上的内容。如果您的终端不支持此功能,它只会将命令行直接放在屏幕下方,并向上滚动。这可以通过将功能较少的终端仿真导出到 TERM 变量或清除它来看到(尽管通过清除它,它可能会进入行模式,或者可能会根据其实现使用最基本的终端代码)。要了解有关保存/恢复屏幕的更多信息,请参阅vim
Ctrl-Z
vim
vim
vim
vim
端子代码(ANSI/VT100)介绍,在标题下保存/恢复屏幕。
答案1
启动时gvim
会打开一个新窗口,因此终端窗口仍可用于命令。对于中间的“shell 转义”,我会:sh
访问 shell 会话,然后键入<Ctrl>-D
退出它;不需要fg
,但在这种情况下会向控制台 shell 添加提示。在没有X
运行的情况下,我启动两个控制台,一个在 vim 运行的地方,另一个在 shell 运行的地方,并且我通过(在我的情况下)例如 切换控制台<Ctrl>-<Alt>-<F1>
。 (根据实际需要,这些选项之一应该适合;我希望。)
答案2
好的,我已经想出了如何在加里·约翰逊的帮助下做到这一点Google 网上论坛 vim_use团体。他通过说明如何tput
从 vim 运行命令来提供帮助。这是我的最终解决方案:
vim内存中有如下函数脚本:
function! ShowTerm() call system(">/dev/tty tput rmcup") call input("") call system(">/dev/tty tput smcup") redraw! endfunction
将脚本映射到某个命令键序列,如下所示:
map [= :call ShowTerm()<CR>
我使用了该序列[=
,但你可以使用任何你想要的。
现在输入按键顺序然后你就会看到另一个屏幕。按进入然后你就回到了 vim 屏幕。 Enter 也不向终端屏幕添加换行符,因此没有行进线。
好的! :) 请注意,这可能不是 15-20 年前的做法,但它确实有效。
编辑
为了不依赖于tput
可用,我发现@MarkPlotnick 推断的以下内容也同样有效。只需将上面的函数替换ShowTerm()
为:
function! ShowTerm()
silent !read -sN 1
redraw!
endfunction
这取决于bash
用作外壳程序(或具有类似读取调用的其他外壳程序)。
第二次编辑
此外,您可以通过将.vim
文件放入 ~/.vim/plugins 文件夹来自动执行此操作,其中包含以下内容:
" Function that allows viewing command line display last time it was seen.
" Note: Will only work on terminals that allow saving/restoring the display.
function! ShowTerm()
" This will invoke the command shell and call the read function.
" Will exit when a key is pressed. This is specific to bash and
" and may have to be changed if using a different shell.
silent !read -sN 1
redraw!
endfunction
" Maps [= sequence to view command line display last time it was seen.
map [= :call ShowTerm()<CR>
答案3
Vim 命令是否:shell
如您所愿工作?:shell<return>
使 Vim 运行你的 $SHELL。当你退出 shell 时,你就回到了 Vim,就在你离开的地方。
答案4
Ctrl+ w+w可用于在 vim 中的分割窗格之间切换,也适用于终端分割。