質問: WSL2でConEmu上で使用しているのですが、`vi`を使用すると直前の出力結果が編集画面によって上書きされてしまいます。 検索した所、一部の環境では`.screenrc` に `altscreen on`と記述することで`vi`の編集時に別のスクリーンを使用し編集後に元のスクリーンに戻れるようなのですがWSL環境ではなんの変化もありませんでした。 WSLとConEmuのスクリーンを消去せずに`vi`の編集操作や`less`などを使用するにはどうすればいいのでしょうか? ### infocmp の結果 ``` $ infocmp | grep -E '(sm|rm)cup' rmam=\E[?7l, rmcup=\E[?1049l\E[23;0;0t, rmir=\E[4l, smcup=\E[?1049h\E[22;0;0t, smir=\E[4h, smkx=\E[?1h\E=, ```
回答: ### 回答 * 残念ながらWSL2ではあきらめた方がよさそうです。 * terminfoのsmcup、rmcupで代替画面バッファを切り替えるところがうまく動いていないようです。 * ConEmuはエスケープシーケンスに関する一部の実装で、WindowsのAPIをフックしているようです。 WSL2はWindowsのAPIを使っていないのでうまくいかないのだと思います。 * WSL2でもWindosアプリが起動できるようです。bash.exeを起動すると問題は発生しませんでした。ただし、WSL2のプロセスやファイルシステムが見えなくなるので、この方法もダメですね。 ### 試したこと * WSLではこのような問題は発生していません。 * WSL2では起動直後からスクロールバーが出るまでは、問題が発生しないのですが、使っているうちに端末の行数を超え、スクロールバーが出ます。こうなるともうだめです。 * WSL2でもBuffer Height Modeをオフにすると、この問題が発生しなくなるのですが、端末に表示された履歴がさかのぼれないため、有効な解決方法ではありません。 * vi、lessなどterminfoのsmcup、rmcupを使っていると同じ現象が発生します。 tput smcup、tput rmcupでも同じ現象を確認することができます。