Vim

如何在 vim 中的 vim 緩衝區和命令 shell 螢幕之間切換?

  • July 19, 2020

我發現不斷按下Ctrl-Z然後fg在這些螢幕之間切換很煩人(命令終端是您用來呼叫的命令行vim)。它還會在我的控制台上生成不需要的fg行。我很確定這是可以做到的,因為我記得我在大學時做過,但我不記得怎麼做的了。

關於終端的資訊及其與 vim 的關係

vt100終端和其他人有一種方法可以在更改螢幕之前保存螢幕,然後它可以在需要時恢復它。 vim這樣做,如果您進入vim然後外殼或Ctrl-Z退出,則可以看到。vim大多數情況下,它會在輸入之前通過在繪製螢幕之前保存螢幕來顯示您在螢幕上的內容vim。如果您的終端不支持此功能,它會將命令行直接放在vim螢幕下方並向上滾動。這可以通過向 TERM 變數導出功能較少的終端仿真或清除它來看到(儘管通過清除它,它可能會vim進入線路模式或可能使用最基本的終端程式碼,具體取決於其實現)。要了解有關保存/恢復螢幕的更多資訊,請參閱終端程式碼 (ANSI/VT100) 介紹,在標題保存/恢復螢幕下。

好的,所以我已經弄清楚如何在 Gary Johnson 對Google Groups vim_use組的幫助下做到這一點。他通過說明如何tput從 vim 執行命令來提供幫助。這是我的最終解決方案:

  1. 在 vim 記憶體中有以下函式腳本:
function! ShowTerm()
   call system(">/dev/tty tput rmcup")
   call input("")
   call system(">/dev/tty tput smcup")
   redraw!
endfunction
  1. 將腳本映射到一些命令鍵序列,如下所示:
map [= :call ShowTerm()<CR>

我使用了 sequence [=,但你可以使用任何你想要的。

現在鍵入鍵序列,您將獲得另一個螢幕。按Enter 鍵,您將返回 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>

啟動gvim會打開一個新視窗,因此終端視窗仍可用於命令。對於中間“shell 轉義”,我:sh會訪問 shell 會話,然後鍵入<Ctrl>-D退出它;nofg是必需的,但在這種情況下會向控制台 shell 添加提示。在沒有X執行的情況下,我啟動了兩個控制台,一個在執行 vim,另一個在執行 shell,我通過(在我的情況下)例如切換控制台<Ctrl>-<Alt>-<F1>。(根據實際需要,其中一個選項應該適合;我希望。)

引用自:https://unix.stackexchange.com/questions/192236