いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

現場でvim慣れていない人が知っておくと便利なTips

概要

この記事は、vimに全然慣れていない人向けの内容です。以下に当てはまる方でしたら、良ければご参照ください。

  • 特に vi (vim) とかに興味はない。使い方を極めたいわけではない。
  • 現場のOSがLinuxで、使えるエディタがvimくらい。
  • 基本的にLinuxみたいなコマンドラインでバリバリ作業する環境に慣れていない。普段はWindows。
  • そのマシンはお客様の所有物であるのでツールとかを勝手に入れてはダメ
  • vimはあるけどデフォルト状態。ネットにあるような便利なプラグインも入っていないし、設定ファイルをいじるのもダメ。

上記のような環境って、業務アプリ作っているエンジニアさんだと結構経験してる人多いのではないでしょうか。。。

急遽、調査しないといけないこととかがあったり、ログを調べたいときがあったり、、、しかも、その場でやらないといけない。

使えるエディタが vim しかない場合って結構あったりします。

とりあえずネットを調べてみると、最低限しっておくべきコマンドとかいろいろ載っていると思いますが、どれも初見だとややこしいですよねー。興味がないと覚える気にはならないと思います。人間そんなものです。

でも、仕事なのでなんとかその場でファイル見たり検索したりして作業する必要があります。

この記事がそんなときに少しでもお役に立てばと思います。

カーソル移動系

vim の 正統?なカーソル移動は h, j, k, l ですが、これが初見で一番意味分からないやつだと思います。

慣れていない場合は、矢印キーでいいです。無理して hjkl つかって、余計な時間費やして作業時間が長くより、普段のエディタと同じように矢印キーで移動してしまえばオケ。プロとして求められる結果に最も早くリーチできる手段を使いましょう。

ページ移動も、Ctrl-f, Ctrl-b となっていますが、これも PgDn, PgUp でオケです。

追加で知っておくと便利なのは、以下ですね。

  • G
    • ファイルの末尾に移動
  • gg
    • ファイルの先頭に移動

まあ、これも Ctrl+Home と Ctrl+End でもオケ。

モード変更と入力

vi系のエディタの特徴はモードを持っていることですが、以下で覚えておきましょう。とりあえず、これだけ知っておけば編集はできます。

  • なにか入力したくなったら、文字入れたい場所まで移動して i
  • なにか削除したくなったら、削除したい文字の場所まで移動して x
  • 入力が終わったら Esc 押す。
  • なんか変なことになったら、あせらず Esc を一旦押す。厳密に1回じゃなくてもいいです。焦ってるときだったら、連打しても別に大丈夫です。コマンドモードに戻った後に何回 Esc 押しても変なことになりません。
    • 「やべー。なんか操作してたら変な文字とか入った・・・」ってなってたら、落ち着いて Esc 押してから u を押します。Undoです。押しただけ戻ります。大丈夫。
  • 保存したいときは :wq でエンターをターンって押す。
  • 保存したくないけど、:q で終了しようとしたら変更があるよって言われて困ったときは :q! って打ち込んで終了する。

文字化け系

現場で困っている人のターミナルの画面見ると大抵こうなってることが多いので、先に記載。

未だにソースや設定ファイルとかの文字コードが Shift-JIS や EUC-JP なときも、ちょこちょこあります。開発はWindowsでやってて、使ってるエディタのデフォルトが未だにShift-JISなので、そのままShift-JISでサーバに上がっているとかも、まだまだ健在な今日このごろ。

最近のLinuxは言語設定がデフォルトでUtf-8とかなので、そんなファイルを

$ vim hoge.c

とかで開くと、当然ですが文字化けします。

猛者は化けたままソースを調査したりする人もいますが、しんどいので以下でエンコーディングを変更しましょう。

ファイルを開いたら以下を打ちます。

Shift-JIS の場合

:e ++enc=sjis

EUC-JP の場合

:e ++enc=eucjp

vim の起動時に -c オプションで先に指定しておいて開くってのも出来ますが、そのオプションを覚えてないかもしれないので、とりあえず開いちゃって、化けてたら上のコマンドで変換して見ましょう。

検索系

現場で vim でファイル開いてガリガリソース書くことはあまりないと思います。そもそも、vim でソースをガリガリかける人は慣れている人ですw

大抵は調べ物するために開いていることが多いと思いますので、それについて。

デフォルトの状態だと、検索しても大文字小文字が区別されている、かつ、ハイライトすらされないので、ちょっとしんどい。

なので、ファイルを開いたら以下の設定を打ち込みましょう。

:set ignorecase smartcase hlsearch wrapscan

です。これで少し検索しやすくなります。

普通の検索

検索の仕方ですが / を押すと上から下への検索ができます。 ? を押すと下から上への検索ができます。

ファイル内で、検索したい単語がある場合は、その単語の上にカーソルを持っていって * を押すと、その単語で検索がかかります。結構便利です。

一旦検索したら、後は n 押すと 次の候補へ、N 押すと前の候補へ移動します。

grep (vimgrep)

最近のLinuxにインストールされる vim はバージョンが結構新しいので vim 内蔵の grep、vimgrepコマンドが使えます。そっちの方が楽なので、以下に紹介。以下のように打ち込むと grep 出来ます。

:vimgrep /検索文字列/ ファイルパターン(*.cとか ./**/*.c とか)

コマンドが完了するとエディタの下エリアに検索結果が表示されます。普通のエディタと同じで検索結果の各行にカーソルを移動させてエンター押すと、該当部分にジャンプできます。

下のエリアを非表示にしたい場合は :cclose と打つと消えます。また表示したい場合は :copen とします。

普通のgrepコマンドも使えます。上の vimgrep のコマンドの部分を grep にするだけです。検索文字は / で囲む必要はないので除去しましょう。

検索文字列が今見えてるソースコードのどこかの単語であることが結構あります。

そういうときは、予め検索対象の単語の上にカーソルを置いておいてから

:vimgrep /

まで打ち込んで、Ctrl+r, Ctrl+w を打ちましょう。カーソルが置いてある部分の単語がコマンド行に挿入されます。

打ち間違いが減るので便利です。

devlights.hatenablog.com

タブ幅とか

デフォルトの状態のvimでファイルを開くと タブ幅 が 8 となっています。これはこれで好きな人も多いと思いますが、ネストが深ーい深ーいソースコードの場合だと、かなりキツイです。。ネストが3くらいになると、もうしんどいと思います。

Linux カーネルコーディングスタイルガイド で Linus さんが「タブ幅が8で見づらいのは、そもそもネストが 3 以上になってるプログラムの方が悪いので、それを改善するべき」って仰っていて、私自身もその通りだと思っていますが、そうも言ってられないプログラムがいっぱいあるのが今日このごろ。

そういうときは、以下のコマンドを最初に打ち込んでおきましょう。

:set tabstop=4 softtabstop=4 shiftwidth=4

これでタブ幅が 4 になります。クソみたいにネストが深いプログラムがある場合はタブ幅を2とかにしてやると、若干見やすくなるかもしれません。

案件によっては、コーディングルールでタブは禁止でスペースでインデントってなっている場合は、追加で以下も打ち込んでおきましょう。

:set expandtab

自動インデント系

ソースを少し調整するとかの作業をする場合は、自動でインデントされる方がいいですね。

以下の設定を打ち込みましょう。

:set smartindent

今、いじろうとしているソースが C言語系 のプログラム言語 (c, c++, javaとか) であれば、以下の方が賢くインデントしてくれます。

:set cindent

ディレクトリ移動とか別のファイルを開いたり系

複数のファイルを見たいので、毎回毎回 vim で 特定のファイルを指定して起動して確認し、終了して再度コマンドラインから

$ vim 別のファイル

とかやってる人をよく見ます。 vim の中でディレクトリ移動や別ファイルを開いたりできるので、そっちを使いましょう。楽ですよ。

vim を開いている状態で

:e.

って押して見てください。今のカレントディレクトリがツリー上で表示されます。普通に移動できるので、カーソルを移動させて移動先のディレクトリでエンター押しましょう。そこのディレクトリの中が表示されます。

開きたいファイルがあったら、そこにカーソルを移動させてエンター押せば開きます。

また、別のファイルを開きたくなったら :e. って押せば、ツリーが表示されます。

そのままだと、ディレクトリは移動しませんが、別のディレクトリをカレントディレクトリにしたい場合は、ツリーで移動先のディレクトリまで移動した後で c を押しましょう。そのディレクトリがカレントディレクトリになります。

このツリー表示、結構便利で vim の中なので、上に書いた検索コマンドがそのまま使えます。

なので、/ で検索してヒットさせて n で移動してエンターってやると効率よく動けます。

最後に

vimさん、私自身は大好きなのですが、いかんせん取っ付きにくいエディタだと思います。知れば知るほど便利になるエディタなので、もし興味をもったら、いろいろコマンドとか覚えるともっと楽になりますよ ^^

最初は vimtutor コマンド がおすすめです。

参考情報

www.vim.org

vim-jp.org

knowledge.sakura.ad.jp

nanasi.jp


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com