LoginSignup
2
0

More than 5 years have passed since last update.

viコマンドで制御文字を入力 coneta #2

Posted at

制御文字

 制御文字はもともとディスプレイ、プリンター、通信装置などを制御するための文字です。
 通常のテキストではあまり使われないため、現在は、文字入力を行うソフトウェアのコマンドとして使われることが多いです。

制御文字の種類

 ASCIIの制御文字は0(0x00)~31(0x1f)、127(0x7f)ですが、拡張されています。詳しくはウィキペディアを参考にしてください。
【参考】
   ウィキペディア(制御文字)
   ウィキペディア(ASCII)

制御文字を入力するには

 制御文字は一部(※)を除いて、キーボードに物理的なキーが存在しません。
   ※ Tab、Esc、BackSpaceなどは専用のキーがあります。
 制御文字を入力する場合はCtrlキーを押しながら、その制御文字に対応するキーを押下します。
 例えば制御文字EOT(伝送終了、End of Transmission、値0x04)に対応する文字はD(ディー、値0x44)なので、Ctrlキーを押しながら、Dを押下すると、制御文字EOTを入力することができます。
 この制御文字は、「コントロール+D」、「^D」と表記し、「こんとろーるでぃー」または「こんとろーるでー」と発音します。
【参考】
   ウィキペディア(キャレット記法)

 制御文字をそのまま入力すると、その制御文字に割り当てられている機能が働き、制御文字を文字として入力できない場合があります。
 ^Vを入力し、続けて制御文字を入力すると、制御文字の機能が抑止され、文字として入力することができるようです。
 例えばcatコマンドで標準入力をファイルにリダイレクトしているとき、^Cを入力するとcatコマンドが終了しますが^V^Cを入力すると^Cがファイルに書き込まれます。

 「^V」による制御文字の機能抑止が、端末エミュレータソフトの働きなのか、ttyデバイスの働きなのかはよくわかりません。

viで制御文字を入力する

 viの入力モードでも「^V」で制御文字の機能を抑止できますが、NUL(値0x00、^@)はこの方法で入力することができませんでした。
 ところが^V^Jを入力するとなぜか^@が入力できました、おそらくvimの機能でなんとかしているのでしょう。

 いろいろ試したのですが、DEL(値0x7F、^?)は入力することができませんでした。
 どうしてもviでDELを入力したい場合は、コマンドモード(非入力モード)で以下をキーインしてみてください。

:r! echo -e "\x7F"

 DELだけの行が挿入されますので、後は適当に加工してください
  ※ DELもyankバッファに入れられるようです。
 この方法は面倒ですが、\x7Fを変えることにより、DEL以外の制御文字も入力できます。

環境

ホスト Windows10 COREi7
VM   VirtualBox バージョン 5.2.8 r121009 (Qt5.6.2)
     CentOS Linux release 7.4.1708 (Core)
     3.10.0-693.21.1.el7.x86_64 #1 SMP Wed Mar 7 19:03:37 UTC 2018
GNU bash, バージョン 4.2.46(2)-release (x86_64-redhat-linux-gnu)
NVIM v0.2.0


2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0