最初に楽をし、後から苦労する、Vim入門のすゝめ
この記事は、
を対象にしています。
小生の方針・記事の心得
- 何事も我慢では始まらない。他人の設定やプラグインを使いまくり、ある程度最初は楽をしよう(提案)。
- マウスに手を伸ばすこと、escを叩くのに小指を動かすことが億劫だ、と一瞬でも思ったら、そこがVimのスタートライン。そこに立つまでは意地でも使い続けよう。
- 一行消すのに「挿入モードでdelete長押しor連打」なんて冗長な操作をしてしまったら
u
でもとに戻しd
かc
でなんとかする。心を鬼にし、体で覚えるのだ。 - 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を始めるには幾つか方法がある。
最も初心者に優しいのはGUIを使うこと。
最近、VSCodeにVimエミュレータがあることを知ったので、それで使ってもいいかも。わりと機能が網羅されていて驚いた。ただ、設定ファイルがそのまま使えないので、一長一短。入りとしてはオススメできるかと。
バックエンド目指すならCUI一択かな?
GUI、CUIともにひとまずこれを勧めておく。
CUIはいくらでもインストール方法が転がってるので 「neovim 自分のOS」とかで探して。どうぞ。
基本、brewとかyumとかパッケージマネージャで導入する癖をつけるとシアワセ。
しかし、小生のaptではちょっとneovimが古いので、私はビルドして使っている。(前言撤回)
neovimは最近盛り上がっているvimの派生。
ちゃんとvimとして使えるので、まずこれ使っときゃ間違いない。と思う。
基本(やるとは言っていない)
こんな場末の記事を見ているなら、
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
と出るので、そのあと記録したい動作を入れていく。
今回はダブルクォートの中だったので、
- 「radio」を検索
ci"
でダブルクォートの中(i")を変更(c)- escとかで閉じる
- 記録終了
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を大量に縦に並べる
- 2行目以下を全て選択(
<C-v>
とかつかう) g<C-a>
と打つ
っ ょ ぃ