VimのCTRL-K <Space>を理解する
はじめに
先日、Vim上で何かの拍子に CTRL-K <Space> <Space>
と入力してしまいました。これにより、見た目上は半角スペースが入力されました。
その時はあまり気にしていなかったのですが、ここで入力された半角スペースはどうも本物の半角スペースとは別物であることに気づきました。半角スペースで検索をしてもその半角スペースのような何か(以降、「半角スペースもどき」と記載します)はハイライトされません。
上記画像の中の、 「Hello World!!」の「Hello」と「World!!」の間に半角スペースもどきがいます。見た目場は半角スペースですが、検索してもハイライトされていません。 なんじゃこれ??と疑問に思ったので、調べてみました。
<CTRL-K>
の挙動
まずは、インサートモードにおける、<CTRL-K>
がどのようなキーなのか調べます。
ヘルプを見てみると、 (:h i_CTRL-K
もしくは、insert - Vim日本語ドキュメント を参照) 以下のように記載されています。
これだけだとよくわかりませんが、ダイグラフを参照するように誘導されているのでそちらも確認してみます。 (:h digraphs
もしくは、 digraph - Vim日本語ドキュメントを参照)
こちらは長いので、参考になりそうな箇所を一部引用します。
CTRL-K {char1} {char2}
と入力することで、非 ASCII キャラクタを入力する機能のようです。 digraph-tableに入力できる文字もまとまっているので、試しに入力してみます。
例えば、CTRL-K A F
と入力することで 「∀」が入力できます。いつでも 「∀ガンダム」が入力できて便利ですね!
また、CTRL-K d =
と入力することで「д」が入力できます。これとCTRL-K D G
で顔文字の完成です。これも便利ですね(°д°)
CTRL-K <Space>
の挙動
今回、私が入力した半角スペースもどき CTRL-K <Space> <Space>
に話を戻します。
ダイグラフの中でも CTRL-K <Space>
は特殊なようで、ヘルプには以下のように記載されています。
「最高位のビットを立てて入力する」というのが、最初よく分からなかったのですがこれはASCIIコードにおける最上位ビットのことを言っているようです。
※2023/12/07 追記:
現在は、翻訳が修正されて、 「CTRL-K
追記おわり
例えば、スペースのASCIIコードは10進数で32です。これを2進数で表現すると以下ようになります。
この最高位のビットを立てるということは、以下のように変更されます。
ASCIIコード表を見てみると、たしかに 10100000
(10進数なら160)は空白文字になっています。私が入力した半角スペースもどきは、この空白文字になっているようです。
一応、上記挙動の認識が合っているのかも確認してみます。 もう一度ASCIIコード表を見てみると、「w」の最高位のビットを立てると「÷」になるようです。
↓ 最高位のビットを立てる
つまり、 CTRL-K <Space> w
と入力すると「÷」が入力されるはずです。やってみます。
確かに「÷」が入力されました。認識はあってそうです。
おわりに
結構長いことVimを使ってるんですが、特に何も考えず i_CTRL-K
はリマップしていた事もあって全然知らない挙動だったので追ってみると面白かったです。
絵文字を入力する時に便利、、、かなぁ?数学の記号とか頻繁に入力する場合には良いのかもしれません。