vim

vi は Linux に標準搭載されるテキストエディタである。その拡張版に当たるのが vim である。現在では、ほとんどの Linux で vim も標準搭載されている。ファイルの保存、テキスト検索、カーソルの移動などはすべてキーボートによって制御されている。vim に慣れるまでは非常に大変だが、使えるようになると大変便利である。

編集コマンド

コマンド動作
hカーソルを 1 文字分だけ左に移動
jカーソルを 1 文字分だけ下に移動
kカーソルを 1 文字分だけ上に移動
lカーソルを 1 文字分だけ右に移動
iカーソル位置の左側から入力を開始
aカーソル位置の右側から入力を開始
o下に 1 行を追加し、入力を開始
O上に 1 行を追加し、入力を開始
yy現在の行をコピー
y10y現在の行から 10 行目までをコピー
dd現在の行をカット
d10d現在の行から 10 行目までをカット
pコピーあるいはカットされた行を、現在の行の下にペースト
Pコピーあるいはカットされた行を、現在の行の上にペースト
xカーソル位置にある 1 文字を削除
:w現在の内容を保存
:qエディタを終了する

vim 機能拡張

vim に新しい機能を追加したり、使いやすいように設定を変えたりする場合、.vimrc ファイルにその設定を書き入れる。.vimrc ファイルのパスは「/home/username/.vimrc」である。uesrname はログイン名で、ファイルが存在しなければ新規作成する。

括弧とクォーテーションの自動補完

次を設定コマンドを .vimrc に書き加える。

inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>
inoremap " ""<LEFT>
inoremap ' ''<LEFT>

カーソル位置の記憶

前回に編集した箇所を記憶して、次回起動時にその箇所に移動するようにする。

augroup vimrcEx
  autocmd!
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line('$') |
    \   exe "normal! g`\"" |
    \ endif
augroup END

文字コード

vim のデフォルトの文字コードは UTF-8 である。Windows で作成したファイルなどを開くとき、デフォルトでは文字化けが生じる。以下のスクリプトを .vimrc に書き加えることによって、vim でファイルを開くときにファイルの文字コードを自動判断(UTF-8、EUC-JP、JIS)できるようになる。

if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  unlet s:enc_euc
  unlet s:enc_jis
endif
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif