情報廃棄物最終処分場

情報の芥溜にも何か使い道があるかもしれない。Webと鉄道とバイクと音楽が好きな人の情報置き場

最初に楽をし、後から苦労する、Vim入門のすゝめ

この記事は、

  • Vim始めたかったけど何度か挫折してる人。
  • 楽にVimの良さを体感したい人。
  • 手っ取り早くかっこいいVimを手に入れたい人。

を対象にしています。

小生の方針・記事の心得

  • 何事も我慢では始まらない。他人の設定やプラグインを使いまくり、ある程度最初は楽をしよう(提案)。
  • マウスに手を伸ばすこと、escを叩くのに小指を動かすことが億劫だ、と一瞬でも思ったら、そこがVimのスタートライン。そこに立つまでは意地でも使い続けよう。
  • 一行消すのに「挿入モードでdelete長押しor連打」なんて冗長な操作をしてしまったらuでもとに戻しdcでなんとかする。心を鬼にし、体で覚えるのだ。
  • Vimの道は果てしなく長い。一度にすべて覚えず、少しずつ覚えて作業を楽にしていきたい、という程度の気持ちで。気長に。
  • 思考のスピードで編集できるようになる、その日まで。俺たちの戦いはまだ始まったばかりだ!
    oratake先生の次回作にご期待下さい!【おわり】

契機

今更だが、Vimに入門した。
いや、正確には7年前ぐらいからCentOS 5(当時は6が出てすぐぐらいだったと記憶している)をいじっては壊ししている時から入門はしていたのだが、
i<Esc>しか使っていなかったので、PHP屋になった今回を契機に、再度門を叩こうという寸法だ。

参考・パクリ・バイブル

qiita.com
人によって進み方は違う。この人のように、自分の使えるようになった順で記録しておき、誰かの役に立てばいいなと思い、今回筆を執った次第だ。


www.amazon.co.jp
必携、実践Vim。つべこべネットで調べてやる前に、近所の技術書がそこそこある書店に行き、実践Vimを購入しよう。
最初から読む必要はなく、大体の見出しを確認し、やりたいことが出たときに引く逆引き。
大体やりたいことが載ってるからすごい。Vimすごい。ってなる。


vim-jp.org
こちらはVim8の日本語マニュアル。
一応こちらにも逆引き的なものがある程度あり、やはり参考になる。
下で紹介しているneovimと大体同じように使えるので、大丈夫大丈夫。
俺も使ってるんだからさ(同調圧力

JUST DO IT

1. 環境をつくる

会社のPCがWinであったため、Windows介助に関する記述があるかもしれないが、
基本はmac, linuxでも同じことができるハズ。
ちなみにプライベートのmacでは元気に、綺麗に(重要)動いている。

さて、Vimを始めるには幾つか方法がある。

  1. vim.exeやなどのGUIなソフト
  2. VSCodeVimエミュレータ入れる
  3. 漢は黙ってCUIコマンドライン

最も初心者に優しいのはGUIを使うこと。 最近、VSCodeVimエミュレータがあることを知ったので、それで使ってもいいかも。わりと機能が網羅されていて驚いた。ただ、設定ファイルがそのまま使えないので、一長一短。入りとしてはオススメできるかと。
バックエンド目指すならCUI一択かな?

github.com

GUICUIともにひとまずこれを勧めておく。
CUIはいくらでもインストール方法が転がってるので 「neovim 自分のOS」とかで探して。どうぞ。
基本、brewとかyumとかパッケージマネージャで導入する癖をつけるとシアワセ。
しかし、小生のaptではちょっとneovimが古いので、私はビルドして使っている。(前言撤回)

neovimは最近盛り上がっているvimの派生。
ちゃんとvimとして使えるので、まずこれ使っときゃ間違いない。と思う。

qiita.com

基本(やるとは言っていない)

こんな場末の記事を見ているなら、
hjklで左下上右移動、
iでInsertモード、
EscでNomalモードに戻る、ぐらい知っている前提でいく。
vimtutorの2か3ぐらいまで行ったらもどってくるがいい。

1. ヤンク(y)とプット(p)

vimのコピー&ペーストは、それぞれYank,Putという。
複数行を指定してヤンクするには、コマンドが便利。
10から21行目までなら、

:10,21y

でヤンクできる。

1. テキストオブジェクトを使う

コードを書いているとこんなタイミングによく出くわす。

// ダブルクォートの中をcheckboxからradioにしたい
<input type="checkbox">
// <?php ~ ?>を一気に消したい
<?php
  // 複数行に渡るphp
?>

こんなときに使えるのが、Vim7ぐらいから追加されているテキストオブジェクト。

1. マクロを使ってみる

さて、こんなものが来た。

<input type="radio" 省略 >
<input 省略 type="radio" 省略 >
<input type="radio" 省略 >
<input 省略 type="radio" 省略 >
続く...

この状態で、typeをradioからcheckboxに直せという。
せめてtypeは一番前に持ってこいと言いたい気持ちをぐっと抑え、
マクロを使ってみることに。

まずノーマルモードで、qaとして、aレジスタに記録(q)する。
するとステータスに記録中 @aと出るので、そのあと記録したい動作を入れていく。

今回はダブルクォートの中だったので、

  1. 「radio」を検索
  2. ci"でダブルクォートの中(i")を変更(c)
  3. escとかで閉じる
  4. 記録終了q

で、このあと記録したマクロを実行するには、@a(今回はaレジスタなのでa)をする。
回数も当然指定でき、回数@aでOK。
このqaでaレジスタにすると、qaって小指でひっかくだけで記録まで行き着くので楽。
ただ、やらかすこともあったので、qqだと連打で済んで楽かなと。

1. fとt

行内で文字を探して移動するもの。
これを使っての選択、編集がなかなか強かったので。

border-bottom-width: 12px;

カーソルが頭だとして。
bottomをtopに書き換えてみる。
fbct-top
順に行ってみる。
f: 行内の指定した1文字に飛ぶ
ex.)fe カーソルからみて、次に出る行内のeに飛ぶ
Fで前を探す。

t: 行内の指定した1文字の前に飛ぶ
fの1文字手前バージョン。
Tも前を探す。
cを組み合わせて変更とした。

あと、f,t共に、,でさらに前、;でさらに後
も探せる。
注意したいのが「行内のみ」というところ。

ついでに2文字で行を跨いで移動できるsneak.vimなんてのも紹介しておく。
わかりやすい参考
sneak.vimで高速カーソル移動 - ぺけみさお

インクリメント、デクリメント

インクリメント、デクリメントができます。
それぞれ<C-a><C-x>
vモードで選べば、その数字を増減できます。
当然増減量も指定でき、20追加なら20<C-a>といった具合。

ただ、最近のVimには新しく機能が追加されているようで
vim-jp.org
なんと縦並びの連番がめちゃくちゃ簡単に作成できる...。
実験してみよう。

  1. 1を大量に縦に並べる
  2. 2行目以下を全て選択(<C-v>とかつかう)
  3. g<C-a>と打つ

っ ょ ぃ