JavaScriptを有効にしてください

Vimを学ぶ

 ·  ☕ 3 分で読めます

概要

普段vimを使用しているものの、全然使いこなせていないので以下の本を読み始めた。
詳細な解説が記載されていて、とてもわかりやすい。

一度に全部覚えるのは無理なので簡単そうなものからメモしておいて日常的に使えるようにする。

移動系

以下のコマンドはg0のようにgと組み合わせると表示行での先頭や末尾になる。

コマンド内容
0先頭文字に移動
^先頭の空白以外の文字に移動
$末尾に移動

gkgjはよく使うけど、先頭や末尾への移動でも使えることは知らなかった。

検索系

行内を移動する場合に、検索コマンドを使用する方が早い場合がある。

コマンド内容
f{char}現在行の末尾へ向かって文字を検索。検索対象上にカーソルが移動。
F{char}現在行の先頭へ向かって文字を検索。検索対象上にカーソルが移動。
t{char}現在行の末尾へ向かって文字を検索。検索対象の手前にカーソルが移動。
T{char}現在行の先頭へ向かって文字を検索。検索対象の手前にカーソルが移動。
;直前に行った検索を再実行
,直前に行った検索を逆方向に実行

abc.def.ghi
このような文字列があり、aにカーソルがあると、
f.では最初の.に移動
t.ではcに移動する。
;を押すとそれぞれ.fに移動する。
,を押すとそれぞれ.dに移動する。
tコマンドの場合は検索対象の手前に移動するので、戻った時は位置が逆になる。

移動したい時にはfがわかりやすいが、dt.のように削除やヤンクと組み合わせる時はtも使いやすそう。

1
2
3
def hoge
  something.bar
end

上記のsにカーソルがあってsomethingを別の単語にしたい時だとct.somethingを消しつつ挿入モードになる
(上記はあまり例がよくなて、cawだとsometing上のどこにカーソルがあっても同じことができる。)
/コマンドでの検索もdコマンド等と組み合わせられる。
d/thing<CR>を行うと現在地以降最初に見つかったthingの前までが削除される。
複数行に渡って削除したいような時は/を使用するやり方が有効そう。

特定の文字で囲まれた範囲で何かする

'hogehogehoge'
{ hoge: hoge }
<h1>hogehoge</h1>

上記のように同じ記号で囲まれた範囲内を編集したい時がよくある。
vi'vi{とするとそれぞれ''{}の内側が選択範囲となる。
同じように、di'とすると囲まれた中が削除される。
va'のようにaを使用すると'hogehogehoge'が選択範囲となる。
<h1>の例だと、vitとするとタグの中を選択することができる。
この時、最初の<から最後の>までのどこにカーソルがあってもhogehogeが選択される。

hoge('hogehogehoge', foo)

上記で()内を全て書き直したいとなったときは(から)の何処かにカーソルがあればci(で削除と挿入を行える。

その他

自作キーボードでキーマップを定義するとき、vimのコマンドをマクロとして登録しておくのも便利なのかなと思った。
今開いているファイルと同じディレクトリを開きたいときは:e %:h<tab><CR>と入力するが、結構長いのでボタン一つでできたら楽かもしれない。
手癖でできるくらいに染み付かせた方がキーボード変わってもできるので良いが、vim使用に特化したキーボードとかあっても面白そう。


書いた人
keee
Webエンジニア

目次