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