0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

簡単・便利なvimの設定たち

Last updated at Posted at 2021-07-12

はじめに

本記事では、ちょっと設定しておくだけですごく便利になる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での効率的作業には、効率のよいカーソル移動が欠かせません。
行番号があれば、すぐに目的の行を指定してそこに飛ぶことが可能になります。

設定ありの場合

549A9338-67F4-4002-9D47-5E3DA318570E.jpeg
例えば図のカーソル位置(32行目)から6行目のpublic:に移動したいと思ったら、
ノーマルモードで6Gなどとすればすぐに移動できます。

設定なしの場合

0DD35EBF-1B3E-4C42-9D6F-05A58B97D998.jpeg
設定がない場合、public:が何行目なのかがパッと分かりません。
これでは少ないキーストロークでの移動は厳しいでしょう。

set tabstop=4

タブ幅を空白4つ分に設定します。
多くのvimのバージョンでは、デフォルトで8になっていることが多いです。
ですが、8だとプログラムのコードを書く際などは少々見にくくなります。
特にネストが深くなってきた場合などは、結構見づらいです。
タブ幅は4がちょうどよい幅ではないかと思います。

設定ありの場合

054C125B-ED8C-4AF3-9857-99E3A512FAB1_4_5005_c.jpeg

設定なしの場合

デフォルトのタブ幅8の場合です。
D101C5CE-FA79-4C37-AD8B-F6B1F9A32102_4_5005_c.jpeg
横に広がりすぎて、やや見にくいです。

set shiftwidth=4

set tabstop=4を設定したのなら、もれなくこの設定もしておきましょう。
これは、ノーマルモード時の不等号記号(<or>)のシフト幅を4に設定するものです。
これもデフォルトで8になっている場合が多いので、タブ幅に合わせて変更しておいた方がよいでしょう。

設定ありの場合

5C2D3C6E-91E4-44D5-BED1-0E49ACAEFC5F_4_5005_c.jpeg
上図の状態から、main文内を>で右にシフトさせます。
9765AA46-6F83-468B-B3C3-B522E574F622_4_5005_c.jpeg

設定なしの場合

18C84201-9E86-4B10-B41A-B66867D9E9BD_4_5005_c.jpeg
タブ幅とシフト幅が合っていないと、このように両方利用した際にバランスがおかしくなってしまいます。

set hls

検索した際にマッチしたワードをハイライト表示してくれます。
ノーマルモードで/?を使って文書内を検索できますが、その際にハイライト表示があるのとないのとでは、探索にかかる時間が大幅に変わってくるでしょう。

設定ありの場合

82EB222C-6B89-4DC8-BD8C-2026A9DCE5DC.jpeg
countという単語を検索した結果です。
ヒットした単語が全てハイライト表示されていて、視覚的に非常に分かりやすいです。
文書内にはcoutという似た単語も混じっていますが、ハイライト表示があることでしっかりと区別することができています。

設定なしの場合

646E5369-DB1F-4F46-BE7E-560344C273FC.jpeg
set hlsを設定していない場合、検索を行うと最初にマッチした単語にカーソルが飛ぶだけで、検索結果自体が非常に分かりにくいですね。

set incsearch

インクリメンタルサーチを可能にします。
インクリメンタルサーチとは、/?で検索する際に、検索ワードを書いてEnterを押下してからではなく、検索ワードを書いている最中に、マッチする単語を常に探索してくれる機能です。
この機能があると、飛躍的に検索スピードが上がります。

設定ありの場合

先程の説明では分かりにくいかと思うので、例を挙げます。
1E19A3A6-2798-44A8-8578-0077BDEB2A1B_4_5005_c.jpeg
こんな文章が書かれたテキストファイルがあります。
図のカーソルの状態で、ノーマルモードから/sと打ってみます。93C21E18-7D43-48C9-907F-9B666F4957B3_4_5005_c.jpeg
まだEnterを押していませんが、最初にヒットしたsに勝手に移動してハイライトしてくれました。
次にeを追加してみます。
885AF08B-5061-4259-949F-9544DDD00D2E_4_5005_c.jpeg
今度は直近のseとなっている部分に移動してハイライトしてくれました。
同じように今度はaを追加してみると、
B05AF5B4-E8D8-41E8-A0C9-5853E8463E82_4_5005_c.jpeg
やはり直近のseaに移動してハイライトしてくれます。
この間、一切Enterを押下していません。

このように、インクリメンタルサーチでは、検索パターンを書きながらマッチする単語をリアルタイムで探索できるので、探索の効率がアップすること間違いなしです。

設定なしの場合

D1564BCC-4E1A-4C34-8BDA-FB7694E4AE24_4_5005_c.jpeg
2EB1E052-BE85-4B90-BB91-50AE6A397056_4_5005_c.jpeg
34824416-F01E-4834-806F-CD49FB87C5F0_4_5005_c.jpeg
先程の手順を実行しても、検索中はなんの変化も現れません。

colorscheme

特定の単語の色を変えてくれます。
vimは、編集するファイルの拡張子をみて、なんのコードを書いたファイルを編集しているのかを判断します。この設定では、その言語で使われる特定の語(予約語や型、文字列など)を判別して、おおよそ種類ごとに色分けしてくれます。
例えば、hello.cというファイルをvimで開くと、vimはこれからC言語のファイルが編集されるのだと判断し、#includeintといった単語を色分けして分かりやすくしてくれるのです。

colorschemeの色分けには、さまざまな種類があり、好みのものを自由に選択できます。
使用可能なカラースキームを確認するには、ノーマルモードで:colorschemeと打ったあとに、Ctrl+dを押下します。
カラースキームを設定するにはcolorscheme eveningのように、空白に続けてカラースキームを指定します。

※設定に際しては、syntax onも一緒に指定する必要があります。
※カラースキームを有効にするには、設定ファイルにこれも一緒に記載してください。

設定ありの場合

colorscheme eveningを設定したものです。
C++で書かれたコードを表示しています。予約語などが色分けされているのが分かります。
E9EFD358-53A7-4247-A9DC-32E25F4BA8AC.jpeg

設定なしの場合

なんの色分けもないと、変数や型、予約語などの区別がすぐにつきづらいです。
5C22A0C4-3B05-42A7-8379-AF39E4CE6778.jpeg

set hidden

隠しバッファを有効にします。
この設定は、vimで複数ファイルを編集したい時に役立ちます。

vimでは、編集中のファイルはメモリ上に展開されていて、編集中はメモリに対してのみ書き込みを行なっています。
そして、:wを行うことで初めてディスクに編集内容が書き込まれるという仕組みです。

vimは、メモリ上の編集ファイルの状態とディスク上の編集ファイルの状態が異なっている時に編集を終了しようとしたり、次のファイルを編集しようとしたりすると、警告してきます。
:wqとするところを、うっかり:qとしてしまって以下のように怒られたことは、誰しも経験があると思います。
CC56806A-00B8-4C97-A939-90F2D784C816_4_5005_c.jpeg
これは、編集してメモリ上の編集ファイルの内容が変わっているのに、保存していないからディスク上の編集ファイルの内容と同じになっていないため、このままでは終了できないと言ってきているのです。

複数ファイル編集時も同様です。
vimでは、起動時に引数として複数ファイルを指定すると、複数ファイル編集が可能になります。
:argsと打てば、現在編集しているファイル群が表示されます。
この複数ファイル編集時に、あるファイルを編集中に保存をしないまま次のファイルを編集しようとすると、やはり上記のような文句をつけてきます。

保存して次のファイルに行けばいいのですが、一旦保存はせずに次のファイルを編集していきたいときもあるでしょう。
そんな時に役立つのが、set hiddenです。
これを設定すると、保存をしないまま別のファイルを編集することが可能になります。

設定ありの場合

:argsと打った時の表示です。今、hello.cというファイルを編集しています。
6CCBEB98-0583-41CA-B724-6F1D0E2FF554_4_5005_c.jpeg
このhello.cを適当に編集し、次のhello.cppを編集するために、:bnと打ちます。
B7B99714-422A-4047-A97A-3AA475A02055_4_5005_c.jpeg
hello.cは保存していませんが、特に警告もなく次のファイルの編集を行えるようになりました。

ここで、:lsと実行してみましょう。
これは、メモリ上に展開されている編集ファイルの状態を表示してくれるものです。
1D7196F9-D8FC-4E0E-9C1E-94A6CD4D956A_4_5005_c.jpeg
hello.cの横に「h」の文字があります。これがhiddenの「h」です。
また「+」の表示がありますが、これはメモリとディスクの状態が異なっていることを示しています。
set hiddenを設定したことで、未保存状態のhello.cは「隠しバッファ」というメモリの領域に一時保存されているものと考えてもらえれば分かりやすいかと思います。

設定なしの場合

今度はset hiddenの設定なしで、同じことをやってみます。
643C1947-B016-4CD6-BDE1-A0096457C02D_4_5005_c.jpeg
hello.cを適当に編集したあと、保存せずに:bnで次のファイルを編集しようとしたところ、上記のように怒られました。

:lsでメモリ上のファイルの状態を確認します。
7DCAF5C4-BF18-40D3-87B6-AC915ACF14C3_4_5005_c.jpeg
set hiddenの設定なしでは、何度トライしても「h」の文字が現れません。
つまり、編集中ファイルを一時保存する場所が利用できないため、編集をやめるには保存するか、「!」をつけて編集を破棄するかして、メモリとディスクの同期を取るまでは、そのファイルを移動できないのです。

最後に

以上、簡単に設定できて便利なvimの設定の紹介でした。

ここに記載のないもので、皆さんが便利と思うものがあれば、
コメント欄に記載いただけると嬉しいです!

参考図書

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?