こんにちはー
Vim は、ターミナル上で動くアプリですが、カーソルの位置を変えて、
既存の行、文字の内容を上書きしたりできます。
こういうのって、どうやるのかなあと調べていたら、
どうやら、エスケープシーケンスというのを使うらしいです。
というわけで、使ってみました。
目的
- ターミナル上の既存の行、文字を書き換える
方法
- エスケープシーケンスを使用して、カーソルを動かす
カーソルを動かしてみる
絶対座標でカーソルを変更します。
次のような形です。
\e[行;列H"
今回は Ruby でやってみたいと思います。
# 左上から 2行、3列目にカーソルを移動 printf "\e[2;3H"
カーソルが移動されます。
書き換えてみる
この後、文字列を出力すれば、文字が上書きされるわけです。
実際のコードは次のようになります。
# 画面をクリアしておく printf "\e[2J" # 1行目1列に apple と出力 printf "\e[1;1H" printf "apple" sleep 1 # 1秒後、再び1行目1列に出力して上書きする printf "\e[1;0H" printf "banana"
1行目1列は、ターミナルの左上なので、
文字がすでにある可能性があります。
そのため、上のコードでは、最初に \e[2J
というエスケープシーケンスで、
ターミナルをクリアしておきます。
これを使って何かできそう
|
がある場所で、a
キーを押すと、>
がはね返るようにしました。
ゲームとかで応用できそうです。
参考
エスケープシーケンスの一覧が載っていて便利です。
今回は絶対座標で変更しましたが、「上にn行」みたいなずらし方の方法もあり、こちらに載っています。