vimについてうだうだとまとめてみた。
表記として、
% hoge と書いてある場合はシェルでの入力、
:hogeとかいてある場合はvim上でのコマンド入力を示す。
vim
vimとは、viから派生したテキストエディタである。Vi IMitation、もしくはVi IMprovedの略である。
viはVIsual editorの略であり、UNIXシステム内で使用されてきた標準的なテキストエディタである。
vimは、
- マルチプラットフォームであり、
- 設定の柔軟性が高く、
- カスタマイズなしでも効率の良いエディタとして使うことが出来る。
なぜvimなのか(WEB+DB PRESS vol.52)を参照
他には、emacs、text mate、などなどのエディタや、総合開発環境なども存在する。
vi的な操作を覚えるためには
vimの拡張性云々以上にviとしての操作を覚えると良い。
方法は2つ
- vimtutorで覚える。
- 効率が落ちても、とにかく使いまくる。
どちらでも良い。自走式で始めるにはvimtutorを触っておくことが最も楽な方法である。
vimtutorとは、viの操作方法を、操作方法が書いてあるテキストファイルを用いて実際に編集作業を行っていくことで
viの操作に慣れるためのツールである。
$ vimtutor
と打てばよい。
加えてヘルプを活用すれば、かなり覚えられる。
:help
それでもうまく覚えられないコマンドが多いかもしれない。
良く使うコマンドをまとめておく。
- ファイル操作
:w 上書き保存 :q 編集終了 :q! 強制的に終了(編集されていても保存確認せず終了) :wq 保存して終了 ZZ 同上 :e [file-name] ファイルをコマンドで指定して編集 :E vim上でファイルリストを開いてファイルを指定し、編集作業 :bd カレントのバッファーを閉じる :bn 次のバッファーに移る :bp 前のバッファーに移る
- 標準モード時
j 上へ(カーソル移動) k 下へ(カーソル移動) h 左へ(カーソル移動) l 右へ(カーソル移動) x カーソル位置の文字を消去 u アンドゥ yy その行をヤンク dd その行を削除する y[num] num行分ヤンクする d[num] num行分削除する y0 カーソル位置からその行の先頭まで d0 カーソル位置からその行の先頭まで y$ カーソル位置からその行の終わりまで d$ カーソル位置からその行の終わりまで yw カーソル位置の単語をヤンク yW カーソル位置の単語をヤンク(:や%などを含む) p ヤンク、削除したものをカーソルの次の行(or次の位置)に貼り付ける P ヤンク、削除したものをカーソルの前の行(or前の位置)に貼り付ける i インサートモードを実行(そのカーソルの位置で) a インサートモードを実行(次のカーソルの位置で) o インサートモードを実行(次の行を追加して) O インサートモードを実行(前の行を追加して) v ヴィジュアルモードを実行 V ヴィジュアルモード(行選択)を実行 r 上書き入力リプレイスモード(その文字だけ) R 上書き入力リプレイスモード(escするまで) :s/hoge/fuga/g hogeをfugaに置換 /hoge でhogeを本文から検索(検索結果はnもしくはNでジャンプできる) :noh 検索結果でハイライトされたもののハイライトを表示しなくさせる :[num] num行へ移動 gg ファイルの先頭へ移動 G ファイルの末へ移動
- インサートモード時
基本的にはそのたのエディタで入力するときと同じ
esc で標準モードに戻る
vimrcに以下の内容を追加すると、標準モードと同じようなキーバインドで操作できる。
imapimap imap imap
カスタマイズ
.vimrcの設定を紹介(githubでdotfileなどと検索して見ると良い)
set fileformat=unix set fileencoding=utf-8 set autoindent set wildmenu set ruler set showcmd set laststatus=2 set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P set number set title syntax on inoremap ,s:AutoComplPopDisable a inoremap ,q :AutoComplPopEnable a nnoremap ,s :AutoComplPopDisable nnoremap ,q :AutoComplPopEnable hi Pmenu guibg=#666666 hi PmenuSel guibg=#8cd0d3 guifg=#666666 hi PmenuSbar guibg=#333333 imap imap imap imap "tab文字も区別されずにハイライトされるので、区別したいときはTab文字の表示を別に "設定する必要がある。 function! SOLSpaceHilight() syntax match SOLSpace "^\s\+" display containedin=ALL highlight SOLSpace term=underline ctermbg=darkblue endf "全角スペースをハイライトさせる。 function! JISX0208SpaceHilight() syntax match JISX0208Space " " display containedin=ALL highlight JISX0208Space term=underline ctermbg=darkblue endf "syntaxの有無をチェックし、新規バッファと新規読み込み時にハイライトさせる if has("syntax") syntax on augroup invisible autocmd! invisible autocmd BufNew,BufRead * call SOLSpaceHilight() autocmd BufNew,BufRead * call JISX0208SpaceHilight() augroup END endif
プラグイン
いろいろ入れてみる。
(後日追記)