はじめに
本記事では、ちょっと設定しておくだけですごく便利になるvimの設定についてご紹介しようと思います。
設定ファイルはホームディレクトリに.vimrc
というファイルを作成してそこに書き込む形を取ります。
ホームディレクトリ上でls -a
をして、.vimrc
というファイルがなければ作成しましょう。
vimのバージョン
自分が使っているvimのバーションは以下でした。
$ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled May 8 2021 05:44:18)
〜以下略〜
便利な設定
set nu
行番号を出力してくれます。
視覚的に今何行目にいるのかがわかるというのは結構ありがたいものです。
vimでの効率的作業には、効率のよいカーソル移動が欠かせません。
行番号があれば、すぐに目的の行を指定してそこに飛ぶことが可能になります。
設定ありの場合
例えば図のカーソル位置(32行目)から6行目のpublic:
に移動したいと思ったら、
ノーマルモードで6G
などとすればすぐに移動できます。
設定なしの場合
設定がない場合、public:
が何行目なのかがパッと分かりません。
これでは少ないキーストロークでの移動は厳しいでしょう。
set tabstop=4
タブ幅を空白4つ分に設定します。
多くのvimのバージョンでは、デフォルトで8になっていることが多いです。
ですが、8だとプログラムのコードを書く際などは少々見にくくなります。
特にネストが深くなってきた場合などは、結構見づらいです。
タブ幅は4がちょうどよい幅ではないかと思います。
設定ありの場合
設定なしの場合
デフォルトのタブ幅8の場合です。
横に広がりすぎて、やや見にくいです。
set shiftwidth=4
set tabstop=4
を設定したのなら、もれなくこの設定もしておきましょう。
これは、ノーマルモード時の不等号記号(<
or>
)のシフト幅を4に設定するものです。
これもデフォルトで8になっている場合が多いので、タブ幅に合わせて変更しておいた方がよいでしょう。
設定ありの場合
設定なしの場合
タブ幅とシフト幅が合っていないと、このように両方利用した際にバランスがおかしくなってしまいます。
set hls
検索した際にマッチしたワードをハイライト表示してくれます。
ノーマルモードで/
や?
を使って文書内を検索できますが、その際にハイライト表示があるのとないのとでは、探索にかかる時間が大幅に変わってくるでしょう。
設定ありの場合
count
という単語を検索した結果です。
ヒットした単語が全てハイライト表示されていて、視覚的に非常に分かりやすいです。
文書内にはcout
という似た単語も混じっていますが、ハイライト表示があることでしっかりと区別することができています。
設定なしの場合
set hls
を設定していない場合、検索を行うと最初にマッチした単語にカーソルが飛ぶだけで、検索結果自体が非常に分かりにくいですね。
set incsearch
インクリメンタルサーチを可能にします。
インクリメンタルサーチとは、/
や?
で検索する際に、検索ワードを書いてEnterを押下してからではなく、検索ワードを書いている最中に、マッチする単語を常に探索してくれる機能です。
この機能があると、飛躍的に検索スピードが上がります。
設定ありの場合
先程の説明では分かりにくいかと思うので、例を挙げます。
こんな文章が書かれたテキストファイルがあります。
図のカーソルの状態で、ノーマルモードから/s
と打ってみます。
まだEnterを押していませんが、最初にヒットしたs
に勝手に移動してハイライトしてくれました。
次にe
を追加してみます。
今度は直近のse
となっている部分に移動してハイライトしてくれました。
同じように今度はa
を追加してみると、
やはり直近のsea
に移動してハイライトしてくれます。
この間、一切Enterを押下していません。
このように、インクリメンタルサーチでは、検索パターンを書きながらマッチする単語をリアルタイムで探索できるので、探索の効率がアップすること間違いなしです。
設定なしの場合
colorscheme
特定の単語の色を変えてくれます。
vimは、編集するファイルの拡張子をみて、なんのコードを書いたファイルを編集しているのかを判断します。この設定では、その言語で使われる特定の語(予約語や型、文字列など)を判別して、おおよそ種類ごとに色分けしてくれます。
例えば、hello.c
というファイルをvimで開くと、vimはこれからC言語のファイルが編集されるのだと判断し、#include
やint
といった単語を色分けして分かりやすくしてくれるのです。
colorscheme
の色分けには、さまざまな種類があり、好みのものを自由に選択できます。
使用可能なカラースキームを確認するには、ノーマルモードで:colorscheme
と打ったあとに、Ctrl+d
を押下します。
カラースキームを設定するにはcolorscheme evening
のように、空白に続けてカラースキームを指定します。
※設定に際しては、syntax on
も一緒に指定する必要があります。
※カラースキームを有効にするには、設定ファイルにこれも一緒に記載してください。
設定ありの場合
colorscheme evening
を設定したものです。
C++で書かれたコードを表示しています。予約語などが色分けされているのが分かります。
設定なしの場合
なんの色分けもないと、変数や型、予約語などの区別がすぐにつきづらいです。
set hidden
隠しバッファを有効にします。
この設定は、vimで複数ファイルを編集したい時に役立ちます。
vimでは、編集中のファイルはメモリ上に展開されていて、編集中はメモリに対してのみ書き込みを行なっています。
そして、:w
を行うことで初めてディスクに編集内容が書き込まれるという仕組みです。
vimは、メモリ上の編集ファイルの状態とディスク上の編集ファイルの状態が異なっている時に編集を終了しようとしたり、次のファイルを編集しようとしたりすると、警告してきます。
:wq
とするところを、うっかり:q
としてしまって以下のように怒られたことは、誰しも経験があると思います。
これは、編集してメモリ上の編集ファイルの内容が変わっているのに、保存していないからディスク上の編集ファイルの内容と同じになっていないため、このままでは終了できないと言ってきているのです。
複数ファイル編集時も同様です。
vimでは、起動時に引数として複数ファイルを指定すると、複数ファイル編集が可能になります。
:args
と打てば、現在編集しているファイル群が表示されます。
この複数ファイル編集時に、あるファイルを編集中に保存をしないまま次のファイルを編集しようとすると、やはり上記のような文句をつけてきます。
保存して次のファイルに行けばいいのですが、一旦保存はせずに次のファイルを編集していきたいときもあるでしょう。
そんな時に役立つのが、set hidden
です。
これを設定すると、保存をしないまま別のファイルを編集することが可能になります。
設定ありの場合
:args
と打った時の表示です。今、hello.c
というファイルを編集しています。
このhello.c
を適当に編集し、次のhello.cpp
を編集するために、:bn
と打ちます。
hello.c
は保存していませんが、特に警告もなく次のファイルの編集を行えるようになりました。
ここで、:ls
と実行してみましょう。
これは、メモリ上に展開されている編集ファイルの状態を表示してくれるものです。
hello.c
の横に「h」の文字があります。これがhidden
の「h」です。
また「+」の表示がありますが、これはメモリとディスクの状態が異なっていることを示しています。
set hidden
を設定したことで、未保存状態のhello.c
は「隠しバッファ」というメモリの領域に一時保存されているものと考えてもらえれば分かりやすいかと思います。
設定なしの場合
今度はset hidden
の設定なしで、同じことをやってみます。
hello.c
を適当に編集したあと、保存せずに:bn
で次のファイルを編集しようとしたところ、上記のように怒られました。
:ls
でメモリ上のファイルの状態を確認します。
set hidden
の設定なしでは、何度トライしても「h」の文字が現れません。
つまり、編集中ファイルを一時保存する場所が利用できないため、編集をやめるには保存するか、「!」をつけて編集を破棄するかして、メモリとディスクの同期を取るまでは、そのファイルを移動できないのです。
最後に
以上、簡単に設定できて便利なvimの設定の紹介でした。
ここに記載のないもので、皆さんが便利と思うものがあれば、
コメント欄に記載いただけると嬉しいです!
参考図書