vi, vimとは anchor.png

vi,vimは,UNIXに昔から標準的に使われているテキストエディタです。
viを基にして,機能を拡張したものがvim(vi improved)エディタ。(以下のviは,vimのこととして記載)

viは,Windowsの一般的なテキストエディタとは,かなり印象が違います。
多少とっつきにくい面はあるんだけど,慣れてくると高速で編集作業が出来るようになる,不思議なテキストエディタです。

viを起動するには,単純に,

$ vi

と入力しても構わないし,またファイル名が決まっていれば(または,既に存在するファイルを開くのであれば),

$ vi ファイル名 

で使えます。

Page Top

Windowsでvi anchor.png

Windowsで使えるコンパイル済みのvim(日本語対応)を, http://www.kaoriya.net/software/vim/ からダウンロードします。32bit版と64bit版があります。

インストールは,適当なディレクトリに解凍すればOK。環境変数のPathに追加しておくと起動しやすい。

Page Top

よく使うvi,vimのコマンド anchor.png

vi,vimは,一般的なテキストエディタと違い,コマンドモード入力モードがあり,モードを切り替えて使用します。(現在のモードがどっちだかが一見するとわからない)
起動直後は,コマンドモードになっていて,入力モードへの切り替えコマンドを入力すると文字の入力が出来るようになります。
ESCキーを押すといつでもコマンドモードに戻れます。

操作がわからなくなったら,とりあえずESCキーを二回ほど押してみるのが良いです。

太字を覚えればなんとかなります [wink]

Page Top

ファイル操作 anchor.png

key内容
ZZ上書き保存し,viを終了
:wq上書き保存して,viを終了
:x保存して,viを終了
:w内容を保存
:q!保存せずに終了
Page Top

モード anchor.png

key内容
i挿入モードへ
a追加(カーソルの次から編集)
o新しい行を追加し挿入モードへ
R上書きモードへ
vビジュアルモードへ
Ctrl + v矩形選択のビジュアルモードへ
ESC入力モード -> コマンドモードに戻る
ctrl + [入力モード -> コマンドモードに戻る
ctrl + zvimを一時停止する
Page Top

カーソル移動 anchor.png

key内容
k,Ctrl + p1行戻る
j,Ctrl +n1行進む
h,BS1文字戻る
l,SP1文字進む
w次の単語(Word)
e次の単語
b前の単語
f(文字)カーソルがある行の(文字)に移動(Find)
F(文字)カーソルがある行の(文字)に移動(逆向き)
0,^行頭
$行末
%対応する括弧に移動
Ctrl + f1画面(Up)
Ctrl + b1画面(Down)
Ctrl + u半画面上(Up)
Ctrl + d半画面下(Down)
Ctrl + e1行(Up)
Ctrl + y1行(Down)
zt, z<Enter>カーソルを画面の最初に
zz, z.カーソル行を画面の中央に
zb, z-カーソル行を画面の最後に
Page Top

行移動 anchor.png

key内容
gg最初の行(1g)
88G88行目
G最終行
H画面上の最初の行(Home)
M画面上の中央の行(Middle)
L画面上の最後の行(Last)
``直前の行マークへ戻る
Page Top

マーク anchor.png

Ctrl + o古いマークへジャンプ
Ctrl + i新しいマークへジャンプ
maマークaを設定(a〜z)
`aマークaにジャンプ
'aマークaの行頭にジャンプ
:marksマーク一覧
Page Top

検索と置換 anchor.png

key内容
/後方検索(.*[]^%/\?~$は,特別な意味をもつので「\.」のようにエスケープが必要)
?前方検索
n再検索
N上方向に再検索
*カーソル下の単語を検索
#カーソル下の単語を検索(上方向に検索)
:%s/hage/hoge/g単語の置換(hageをhogeへ置換)。%はファイル全体の意味。
Page Top

編集 anchor.png

key内容
.直前の変更を繰り返す
uUndo
Ctrl + rRedo
xカーソル位置の1文字を削除
Xカーソル左の1文字を削除
dw1単語削除
dd1行削除
D行末まで削除(d$)
J次の行をくっつける
Page Top

コピー&ペースト anchor.png

key内容
yw1単語コピー(yank)
Y,yy今いる行をコピー(yank)
pカーソルの場所に,ペースト
yy5p現在の行をコピーし,下に5行追加する
gv直前の選択範囲を再選択
vvisualモードへ(hjklで範囲選択)
V行全体を選択してvisualモードへ
Ctrl + Vvisualモードへ(矩形選択)
o,O(visualモード中)選択範囲の四隅へ移動
Page Top

特殊文字 anchor.png

key内容
Ctrl + v return改行文字の入力
Ctrl + v tabTab 文字の入力
Page Top

ウィンドウ anchor.png

key内容
:vsplit画面を左右に分割する
:e filename今いるWindowにファイルを開く(Edit)
:e test*.ccワイルドカードを指定してファイルを開く
Ctrl +w h左のWindowへ移動
Ctrl + w l右のWindowへ移動
Page Top

バッファ anchor.png

key内容
:buffers編集中のバッファ一覧を表示
:bn次のバッファに移動
:bd[elete]バッファを削除
Page Top

単語補完 anchor.png

key内容
Ctrl + p単語補完(前方検索)
Page Top

マクロ anchor.png

key内容
q<letter>マクロの記録開始
qマクロの記録停止
@<letter>マクロの実行
Page Top

レジスタ anchor.png

key機能
:regレジスタの一覧表示
Ctrl + r "ヤンクした文字列をペースト
Page Top

コマンドの意味 anchor.png

key意味
g繰り返し
c1回毎に確認
Page Top

その他 anchor.png

key内容
:!command外部コマンドの実行
:範囲選択中に : を入力すると,選択領域の範囲指定( ’<,’> )が自動で挿入された状態でコマンドモードに入る。これを置換に利用すると便利。
(例: :'<,'>s/old/new/g)
Ctrl + a数値のインクリメント
Ctrl + x数値のデクリメント
Page Top

tips anchor.png

Page Top

行番号を表示 anchor.png

行番号を表示させるには,コマンドモードで,

:set nu

逆に,行番号をを表示させないためには,

:set nonu
Page Top

改行コードが誤認識されているとき anchor.png

:set ff=dos   #なんか「^M」がいっぱい出たとき
:set ff=unix
:set ff=mac   #「^M」がいっぱい出て、かつ全部一行になってるとき

ffは,fileformatの略。

なお,dosとunixの改行コードが混在しているようなファイルについては,上のコマンドを実行してもうまくいかない場合がある。この場合は手作業で直すしかない。

Page Top

改行コードの自動認識 anchor.png

以下を .vimrcに書いておく。

set fileformats=unix,dos,mac

新規ファイルの場合,fileformatsの最初の改行コードが使われるようなので好みにより順番を変える。

Page Top

文字コードが誤認識されているとき anchor.png

以下のようなコマンドで,編集中のファイルを指定した文字コードで開き直せる。

:e ++enc=euc-jp
:e ++enc=sjis
:e ++enc=iso-2022-jp

しょっちゅう誤認識が起こるときは,以下を~/.vimrc(or %HOME%\_vimrc)に設定する。

" 文字コードの自動認識
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'
  " iconvがeucJP-msに対応しているかをチェック
  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'
  " iconvがJISX0213に対応しているかをチェック
  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
  " fileencodingsを構築
  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
" 日本語を含まない場合は fileencoding に encoding を使うようにする
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
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif
Page Top

文字コードを変更して保存する † anchor.png

cp932(Shift-JIS)にするには以下のようにする。

:set fileencoding=cp932

この状態だとまだ保存してないので,:wしてやれば文字コードを変更して保存になる。

Page Top

ファイルの種類を指定したいとき anchor.png

:set ft=html   #htmlファイルとして色付け・インデントしたいとき

ftは,filetypeの略。

ファイルの先頭か末尾5行以内に,

vim:set ft=html:

などと書いておくと,読み込み時に自動的に種類を指定できるみたい。

Page Top

編集中のファイルをRubyで加工する anchor.png

[範囲指定] !ruby を使う。ファイル全体なら,

:%!ruby -e 'print ARGF.read.gsub( /before:(.*) after:(.*)/, "\\1 => \\2" )'

とか。

選択範囲だけ加工する場合は

:'<,'>!ruby ...

(vで選択中に:を押すと,'<,'>は自動で入力される。)

Page Top

キーボードマクロを使う anchor.png

vimでは,qコマンドで一連のキー操作をレジスタに保存し,それを@コマンドで実行することができる。

例えば,texで論文を書いていて,「true」や「my-func」のような識別子全てを,「\\|true|」「\\|my-func|」のように囲いたいときは,囲いたい単語にカーソルを合わせて,

qk (レジスタkに記録開始)
dw (単語の削除)
i (入力モードに入る)
\|| (囲い)
ESC (入力モードを抜ける)
h (一文字左へ)
P (ペースト)
q (記録終了)

とすると,「カーソルの下の単語を\| |で囲む」という一連の操作がレジスタkに保存される。

あとは,文章中の識別子のところで「@k」のように入力するとその単語が\\| |で囲まれる。

Page Top

カーソルを点滅させない(gvim) anchor.png

set guicursor=a:blinkon0
Page Top

カーソル下のファイル名を開く anchor.png

例えば,hoge.txtという文字列にカーソルを合わせて,gfを押すとhoge.txtを編集できる。

Page Top

abc <--> ABC anchor.png

で,カーソル下の文字の大文字と小文字を切り替えることができる。

g~[motion]で,ある範囲の文字を一気に切り替えることができる。例えば,g~wで単語,g~$で行末までとか。

g~~で,現在行の大文字と小文字を切り替えることができる。

Page Top

バイナリ編集 anchor.png

vimでバイナリを編集したい場合,よくある16進ダンプとそれのテキスト表示があると便利。

xxdを使って,バイナリ編集をする方法がある。(xxdは,MinGW等をインストールすると使えます。)

"バイナリ編集(xxd)モード(vim -bでの起動,もしくは *.binファイルを開くと自動処理する)
augroup BinaryXXD
  autocmd!
  autocmd BufReadPre  *.bin let &binary =1
  autocmd BufReadPost * if &binary | silent %!xxd -g 1
  autocmd BufReadPost * set ft=xxd | endif
  autocmd BufWritePre * if &binary | %!xxd -r | endif
  autocmd BufWritePost * if &binary | silent %!xxd -g 1
  autocmd BufWritePost * set nomod | endif
augroup END
Page Top

私が使用している設定ファイル anchor.png


新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

トップ   凍結 差分 バックアップ 複製 名前変更 リロード   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom
Counter: 899, today: 2, yesterday: 4
最終更新: 2020-12-26 (土) 16:07:41 (JST) (1217d) by yuji