はじめに
この記事はVim Advent Calendar 2016の15日目の記事です.
今回はVimであまり知られていない,使われていない機能であると思われる暗号化機能について書きたいと思います.
暗号化機能
Vimはテキストエディタですが,単なるテキストエディットだけに留まらず,テキストファイルを暗号化する機能も備わっています. 編集したテキストファイルを保存するとき,ユーザが指定したキーによって暗号化し,再度そのファイルオープンするときにキーの入力を求めます.
そして,オープン時に入力されたキーによって復号化を行うので,正しいキーであれば元のテキストが表示され,異なったキーであればデタラメなテキストが表示されるようになっています.
利用可能な暗号化方式
VIm 8.0の時点では,以下の表に示す3つの暗号化方式が利用可能となっています.
各暗号化方式についての詳細は :h cryptmethod
を参照しましょう.
暗号化方式 | 強度 | バージョン |
---|---|---|
zip | 弱 | 7.2 以前 |
blowfish | 中強度(脆弱性あり) | 7.3 以降 |
blowfish2 | 中強度 | 7.4.401 以降 |
cryptmethod
オプションに上記のいずれかの値をセットすることで,暗号化方式を指定することができます.
デフォルトでは zip
の指定となっているのですが,最新のVimを利用しており,古いバージョンのVimで開き直すことを考えないのであれば, blowfish2
を指定するべきでしょう.
利用できる最新の暗号化方式を指定していない場合,暗号化するときにVimからワーニングメッセージが出て邪魔になります.
あらゆる環境を想定していて,その環境のVimで利用可能な最新の暗号化方式を利用したいという奇特な方は,以下の設定を.vimrcに記述するとよいでしょう.
if has('cryptv') if v:version > 704 || v:version == 704 && has('patch401') set cryptmethod=blowfish2 elseif v:version >= 703 set cryptmethod=blowfish else set cryptmethod=zip endif endif
blowfish2
,blowfish
が利用可能かどうかはそれぞれ has('crypt-blowfish2')
, has('crypt-blowfish')
で確認することもできるのですが,これらの条件が利用できるようになったのは Vim7.4.1009 以降でおり,blowfish2 が利用可能になったバージョンよりも後です.
したがって,Vimのバージョンによって分岐する方がより古いVimに対応しているといえるでしょう.
暗号化を行う
さて,実際に暗号化を行ってみましょう.
コマンド経由
現在のファイルを暗号化したい場合,ファイル保存前に :X
コマンドを実行し,暗号化キーを指定してください.
よくあるパスワード入力のように,確認のため2回同じキーを入力する必要があります.
オプション経由
オプション key
の値に暗号化に用いるキーを設定し,その後にファイルを保存することでも暗号化できます.
ただし, .vimrc に記述すると,暗号化キーが筒抜けなので,通常は記述するべきではないでしょう.
(.vimrcに記述した場合は,何もしなくても常に暗号化ができるというメリットはあります)
利用する場合は,保存前に :set key=hogehoge
といった感じで,手動でオプションに値を設定しましょう.
オプション key
は扱いがやや特殊であり, set key
や echo &key
としても,設定値を確認することはできません.
また,ヒストリにも set key=
までしか残らず,暗号化キーが分からないように細工されています.
key
オプションに値を設定する場合は,暗号化キーの入力が一度で済みますが,その分typoに気付かなかった場合,ファイルの復号化が難しくなるでしょう.
僕としては, :X
コマンドを利用して暗号化キーを設定するとよいと思います.
暗号化を解除する
一度暗号化したファイルは,再度オープンし,保存し直しても,暗号化されたままです. 暗号化を解除したくなった場合は,空のキーを設定し直すとよいです.
:X
コマンドを用いる場合は,キーを何も入力せずに <CR>
だけを2回,key
オプションを利用する場合は, set key=
としましょう.
印刷機能
実はVimには印刷機能が備わっています.
印刷は簡単で, :hardcopy
コマンドを実行するだけです.
印刷設定
印刷設定に関するオプションは7種類あり,以下の通りです.
オプション | 機能 |
---|---|
printdevice |
:hardcopy! のようにbang付きで実行されたときのプリンタを指定 |
printencoding |
印刷に用いるエンコーディングを設定 |
pritfont |
Ascii文字の印刷に用いるフォントを設定 |
printheader |
印刷のヘッダを設定. statusline と同じ書式で指定する |
printmbcharset |
マルチバイトの文字セットを指定 |
printmbfont |
マルチバイトの印刷に用いるフォントを設定 |
printoptions |
余白,行番号の有無,折り返しの有無等を設定 |
上記7つの内,基本的に設定しておくべきなのは以下の3つでしょう.
printfont
printmbfont
printoptions
あとは,自動設定に任せる or 用いない等で設定しなくても大丈夫でしょう.
僕はWindowsユーザなのですが,以下のように設定しています.
set printoptions=number:y,header:0,syntax:y,left:5pt,right:5pt,top:10pt,bottom:10pt set printfont=Consolas:h8 set printmbfont=r:MS_Gothic:h8,a:yes
標準では行番号の印刷がoffになっているので, number:y
を入れておくとよいでしょう.
また,僕はヘッダ行を必要としないため header:0
を付与しています.
上記の設定にはありませんが,縦向きor横向き,印刷する用紙の大きさ等を設定することもできます.
印刷設定
印刷には,設定中のカラースキームが一部反映されます. そのため,実際に印刷してみると,悲惨な結果になっていることがあります.
仮想プリンタ等を導入し,実際に出力してみて,どうなっているかを確認してから,紙に出力するとよいでしょう.
まとめ
この記事ではVimの暗号化機能と印刷機能について紹介しました. 暗号化機能の利用シーンとしては,ギョームでちょっと秘密にしておくべきファイルを扱うとき,などが考えられるでしょうか. 印刷機能は何かの用事があってコードを印刷したいときに利用できると思います.
なお,neovimでは暗号化機能は削除されているため,利用することはできません. この点には気を付けましょう.