昨年、Vimを使える人間になりたいという気持ちからVimに入門した。

まずvimtutorをやり、またVim以外のエディタを使うことを禁止して慣れるようにした。 vimtuorのあとは実践Vimを読んだりしながら日常使いの中でVimに慣れていった。 また基本的にプラグインを追加することを禁止し、不用意な.vimrcの編集も禁止して、素の状態のVimに慣れるように気を配っていた。

そんなこんなでVimに慣れようとしていたわけだが、最初期vimtutorをやるだけではなかなかキーバインドが覚えられず、とても編集速度が遅かったので、同時にメモに書き出すことで覚えていたようである。

このときのメモをここに供養する。書いた日付は2019/10/28。


Vim :help 日本語化

まず次のコマンドを実行

$ curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

次に~/.vimrcに次の内容を追記

" .vimrc

call plug#begin('~/.vim/plugged')
" A project which translate Vim documents into Japanese.
Plug 'vim-jp/vimdoc-ja'
call plug#end()

set helplang=ja,en

次にVimを立ち上げて:PlugInstallと入力しプラグインをインストールする

参考: Vimをちゃんと知りたい!だからHelpを日本語化する!

.vimrcを無視する

.vimrcを書き換えて起動しなくなったら

$ vim -u NONE -N
# -u None ... .vimrcを読み込まない vi互換モードにする
# -N ...(nocompatible) vi互換モードをオフにする

. 直前の操作を繰り返す

ノーマルモード

直前のコマンドを繰り返す(カーソル移動はコマンドとみなされない) (ex.x, dd, >G)

インサートモード

挿入モードに入った瞬間(iを押す等)からノーマルモードに戻る(<Esc>を押す)までの間のキーストロークが記録されている
.を押すことでこの一連の流れを再生できる

移動

  • h ... ←
  • j ... ↓
  • k ... ↑
  • l ... →
  • $ ... 行末に移動
  • w ... 次の単語へ移動
  • gg ... ファイル先頭へ移動
  • G ... ファイル末尾へ移動
  • {数字}G ... {数字}行目に移動
  • <Ctrl>G ... 現在のカーソル行を表示
  • >G ... 現在の行からファイル末尾までのインデントを1段深くする

基本操作

  • x ... カーソル下の文字を削除
  • dd ... 行頭から行末まで削除
  • i ... インサートモードへ切り替え
  • a ... カーソルの右隣でインサートモードへ切り替え
  • A ... 行末に移動してインサートモードに切り替え
  • o ... 次行を作りインサートモードへ
  • O ... 前行を作りインサートモードへ
  • u ... アンドゥ 戻る
  • U ... 行単位でアンドゥ 戻る
  • <Ctrl>R ... リドゥ 戻るの取り消し
  • 0 ... 行頭へ移動
  • p ... 貼り付け (削除したものを貼り付け 例えばddコマンドで削除した行等
  • r ... 置き換え カーソル下の文字を一文字消して次に入力した一文字で置き換える。なお置き換え後もノーマルモードを維持する
  • R ... 置換モード カーソル下を上書きして文字を挿入する escキーでノーマルモードに戻る
  • % ... 対応する括弧へ移動
  • yy ... 行をヤンク
  • yw ... カーソル後ろの空白を含む単語をヤンク

モーション操作

d

ノーマルモードでモーション操作を行うとカーソル移動

d{モーション}を行うと現カーソルからモーション先まで削除

d{数字}{モーション}ないし{数字}d{モーション}は等価で、数字個先のモーションの差示す場所まで削除する

e

c{モーション}を行うと、現カーソルからモーション先まで削除して挿入モードに切り替え

モーション

  • w ... 空白を含む単語尾
  • e ... 空白を含まない単語尾
  • $ ... 行末

コマンド

終了

  • :q! ... 内容を破棄して終了
  • :wq ... 内容を保存して終了

書き込み

  • :w filename ... ファイルfilenameへ書き込み

検索

  • /hoge ... hogeを前方検索
  • ?hoge ... hogeを逆方向に検索
  • (検索した状態で)n ... 次を検索
  • (検索した状態で)<Ctrl>o ... 一つ前の検索結果に戻る

置換

  • :s/before/after ... カーソル行の1つ目のbeforeをafterへ置換
  • :s/before/after/g ... カーソル行の全てのbeforeをafterへ置換
  • :3,5s/before/after/g ... 3行目から5行目の全てのbeforeをafterへ置換
  • :%s/before/after/g ... ファイル内全てのbeforeをafterへ置換
  • :%s/before/after/gc ... ファイル内全てのbeforeを都度確認しながらafterへ置換

検索/置換のオプション

  • :set ic ... 検索時に大文字小文字を区別しない(ignorecase)
  • :set is ... 検索フレーズに部分マッチしている部分を表示する(incsearch)
  • :set hls ... マッチする全てを強調表示する(hlsearch)

ターミナルコマンド実行

  • :!ls ... lsを実行(のちエンターでvimに戻る)

挿入

  • :r filename ... filenameの内容をカーソル位置へ挿入
  • :r !ls ... lsの結果をカーソル位置へ挿入

help

  • :help ... helpウィンドウを開く
  • :help hoge ... hogeに関するhelpを見る

候補と保管

  • :e<TAB> ... eから始まるコマンドを補完
  • :e<Ctrl>d ... eから始まるコマンドを一覧表示

visualモード

  • v ... visualモードへ切り替え カーソルを移動させると、visualモード移行時のカーソルとの間が反転し選択される
  • (visualモードで短形選択時):'<,'>w filename('<,'>は自動で入力される) ... 短形選択部分をfilenameへ書き出し
  • (visualモードで短形選択時)y ... ヤンク(コピー)