有关终端的信息及其与 vim 的关系

有关终端的信息及其与 vim 的关系

Ctrl-Z我发现不断按下然后fg在这些屏幕之间切换(其中命令终端是您用来调用的命令行)很烦人vim。它还会fg在我的控制台上生成不需要的行。我很确定这是可以做到的,因为我记得我在大学时做过,但我不记得如何做到。

有关终端的信息及其与 vim 的关系

vt100 终端和其他终端有一种方法可以在更改屏幕之前保存屏幕,然后可以在需要时恢复它。 执行此操作后,如果您进入然后脱壳或退出vim,就可以看到。大多数时候,它会通过在绘制屏幕之前保存屏幕来显示进入之前屏幕上的内容。如果您的终端不支持此功能,它只会将命令行直接放在屏幕下方,并向上滚动。这可以通过将功能较少的终端仿真导出到 TERM 变量或清除它来看到(尽管通过清除它,它可能会进入行模式,或者可能会根据其实现使用最基本的终端代码)。要了解有关保存/恢复屏幕的更多信息,请参阅vimCtrl-Zvimvimvimvim端子代码(ANSI/VT100)介绍,在标题下保存/恢复屏幕

答案1

启动时gvim会打开一个新窗口,因此终端窗口仍可用于命令。对于中间的“shell 转义”,我会:sh访问 shell 会话,然后键入<Ctrl>-D退出它;不需要fg,但在这种情况下会向控制台 shell 添加提示。在没有X运行的情况下,我启动两个控制台,一个在 vim 运行的地方,另一个在 shell 运行的地方,并且我通过(在我的情况下)例如 切换控制台<Ctrl>-<Alt>-<F1>。 (根据实际需要,这些选项之一应该适合;我希望。)

答案2

好的,我已经想出了如何在加里·约翰逊的帮助下做到这一点Google 网上论坛 vim_use团体。他通过说明如何tput从 vim 运行命令来提供帮助。这是我的最终解决方案:

  1. vim内存中有如下函数脚本:

    function! ShowTerm()
        call system(">/dev/tty tput rmcup")
        call input("")
        call system(">/dev/tty tput smcup")
        redraw!
    endfunction
    
  2. 将脚本映射到某个命令键序列,如下所示:

    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 中的分割窗格之间切换,也适用于终端分割。

相关内容