読者です 読者をやめる 読者になる 読者になる

vimについてうだうだとまとめてみた。

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、などなどのエディタや、総合開発環境なども存在する。

vimを使うために

UNIX/linuxのシステム上で

$ vim

と打てばよい。

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に以下の内容を追加すると、標準モードと同じようなキーバインドで操作できる。

imap  
imap  
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 :AutoComplPopDisablea
inoremap ,q :AutoComplPopEnablea
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

プラグイン

いろいろ入れてみる。

(後日追記)