端末とvimとの関係に関する情報

端末とvimとの関係に関する情報

Ctrl-Z押し続けてこの画面を切り替えるのは面倒ですfg(ここでCommand Terminalは呼び出しに使用するコマンドラインです)vim。また、fg私のコンソールに不要な行が生成されます。大学でやったことが覚えているからできると確信しています。しかし、どうしたのか覚えていません。

端末とvimとの関係に関する情報

vt100端末とは異なる端末には、画面を変更する前に保存し、必要に応じて復元する方法があります。これを行った後、vimエントリーしてから剥がしたり終了したりすることを確認できます。ほとんどの場合、画面を描画する前に保存して、前の画面にあった内容を表示します。端末がこれをサポートしていない場合は、画面のすぐ下にコマンドラインを配置して上にスクロールします。これは、機能性の低い端末エミュレーションをTERM変数としてエクスポートするか、それを消去することでわかります(これをクリアするとラインモードに入ることも、実装に応じて最も基本的な端末コードを使用することもできます)。画面の保存/復元の詳細については、次を参照してください。vimCtrl-Zvimvimvimvimターミナルコード紹介(ANSI/VT100)、タイトルの下保存/復元画面

答え1

起動時にgvim新しいウィンドウが開き、ターミナルウィンドウでコマンドを引き続き使用できます。中間の「シェルエスケープ」の場合は、:shシェルセッションにアクセスして<Ctrl>-D終了を入力します。 not require fg。ただし、この場合はコンソールシェルにプロンプ​​トを追加します。実行せずにX2つのコンソールを起動します。 1つはvimを実行し、もう1つはシェルを実行しています。私の場合は、<Ctrl>-<Alt>-<F1>次のようにコンソールを切り替えます。 (実際の要件に応じて、これらのオプションのいずれかが適していることを願っています。)

答え2

さて、Gary Johnsonの助けを借りてこれを行う方法を見つけました。Google グループ vim_useグループ。彼はvimでコマンドを実行する方法を説明するのに役立ちtputます。これが私の最終的な解決策です。

  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これは、使用しているシェル(または同様の読み取り呼び出しを使用する他のシェル)によって異なります。

2番目の編集

また、.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を実行させてください。シェルを終了すると、正確に中断した場所であるVimに戻ります。

答え4

Ctrl+ w+ wvimで分割ウィンドウを切り替えるために使用することができ、端末分割でも機能します。

関連情報