---
title: "vim tricks 1 | grasys blog"
url: "https://blog.grasys.io/post/eric/vimtricks1"
description: "こんにちは、エリックです。去年９月入社してから初のブログでどうしようかと悩んでて、text editorの話はどうかなと。 もう██年も使ってたvimって、基礎過ぎない？って思ったけど、同僚の入力とか、ウェブの動画やセミナー見ると、「やっぱこの技あまり知られてないな〜」って思っちゃったことは少なくない。 では、５つの…"
---

# vim tricks 1

-   ![](/_astro/noicon.CTHOhNiB_1HMs6A.webp)[eric](/authors/eric/)
-   公開日：2020年4月15日
-   カテゴリー：[Tech](/categories/tech/)
-   タグ：[#text-editors](/tags/text-editors/)[#vim](/tags/vim/)

![vim tricks 1](/_astro/og-image.DDSiu2Ny_XHpDd.webp)

こんにちは、エリックです。去年９月入社してから初のブログでどうしようかと悩んでて、text editorの話はどうかなと。 もう██年も使ってたvimって、基礎過ぎない？って思ったけど、同僚の入力とか、ウェブの動画やセミナー見ると、「やっぱこの技あまり知られてないな〜」って思っちゃったことは少なくない。 では、５つのvim技をお伝えさせて頂きます。

## 1. `:x`

最初に習うコマンドの中には、保存と終了する時に`:wq`だね？`vimtutor`にもそう書いてあるけど、怠け者のプログラマーは「２文字が多すぎ、１つで良い」だね？ だからその時に**w**rite + **q**uitよりe**x**itが速い。変更がなければ保存しない（する理由もない）から更に速い！

## 2. `vimdiff`

`diff`で比べるファイルがあまりにも変更が多いと、`diff`の出力が長くて、見づらくなる。その時に`vimdiff`で! 左右に表示され、変更のあるところがハイライトされて明らかに見える。 後、全く同じところは自動的に非表示にされます（ここには時間ないけど、折畳という魔法の技の詳しくは`:h folding`で調べるべし！）

## 3\. motion keys

ノーマルモードで`hjkl`でのカーソル移動は基礎だけど、vimtutorで`w`や`e`で**w**ordと**e**ndも言葉一つ一つ移行出来ることが教わる（まあ、普段スペースで分けてる’word’だから日本語がちょっと違う：ひらがな・カタカナ・漢字の間が「ワード」の区切れになる）。

-   `b` / `w` 言葉(word)で後方・前方に移動（keywordみたいに区切られる）
-   `B` / `W` 言葉(WORD)で後方・前方に移動（非空白文字で区切られる）
-   `(` / `)` 文で後方・前方に移動（`/[.!?]\s+/`で区切られるから「。」が残念ながら対象外）
-   `{` / `}` 段落で後方・前方に移動（空行で区切られる）
-   `0` / `^` / `$` その行の最初の文字・最初の非空白文字・最後の文字に
-   `gg` / `G` ファイルの最初・最後に移動

たまにまだ`lllllll`とか打ってる方を見かけてるから、\[count\]カウントって知らない？と思っちゃう。`lllll`→`5l`、`jjjjjjjj`→`8j`で打ち続けなくて済むし、`50%`とかでファイルの真ん中へ飛ぶことも可能。 もっと知りたい方は`:h motion`でどうぞ！

## 4. `:set paste`

Webからコピペすると、たまにインデントされたコードが自動的にインデントされ過ぎて段々右へ行き続く。

Plain textcontent\_copy

```
if (foo) {
  bar();
  } else {
      baz();
        hoge(moge);
          # this is getting out of hand
          }
```

その時に`u`でundoと`:set paste`を設定して再びペースト：

Plain textcontent\_copy

```
if (foo) {
  bar();
} else { 
  baz();
  hoge(moge);
  # much better
}
```

終わったら`:set nopaste`で、自動インデントが元に戻す。

## 5\. statusline

ず〜っと前に作った`~/.vimrc`で、以下を入れた：

Plain textcontent\_copy

```
set laststatus=2     " always show filename/status bar
set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
```

それで、今編集してるファイルでこんなの見える： `eric/2020-04-15-vim_tricks.md[+]            20197 0x4EE5 70,44-33 96%`

ファイル名はもちろん、\[+\]で変更ありって分かる、最後に行と列、ファイルのポジションも書いてあり便利です。 列の44-33っていうのは、日本語があるマルチバイト列の44バイト目と画面上の33列目。 でも、`20197 0x4EE5`のとこって何なんだろうね？

そう、「以」の文字コード。カーソル下の文字コードがいつも表示されると、スペースとタブどれか分かりやすくなり、例えばoption-spaceでノーブレークスペースを打ち間違えたら、すぐに分かるように。“Smart Quotes”という、ASCII以外の引用符もプログラムに入れるとエラーになっちゃうから、それも見えて助かる。ターミナルでかいなら、他の入れるものが一杯あるんで`:h statusline`で検討しよう。

ではでは、vimの技一杯あるけど、今回はこれで。いつでも`:h`でdoc読みまくって、新しい技を習うのお勧めしますよ〜（vim 4?の時ぐらいにマニュアルを印刷してソファでも読んだりしたw）。 次回まで、みんなのvim力をLEVEL UPしようぜ！

〜終〜

## この記事を書いた人

[![](/_astro/noicon.CTHOhNiB_Z24aAgM.webp)](/authors/eric/)

### [eric](/authors/eric/)

ericのプロフィールと執筆記事をご覧いただけます。

[プロフィールと記事一覧](/authors/eric/)