Ads

よく使うコマンド

カーソル移動h
j
k
l
<C-f>PageDown
<C-b>PageUp
ggファイルの先頭へ移動
Gファイルの末尾へ移動
^行頭へ移動
$行末へ移動
H画面上の1行目へ移動(2Hで2行目へ)
M画面中央行へ移動
L画面上の最下行へ移動(2Lで下から2行目へ)
%対応する括弧へ移動
z<enter>現在のカーソル位置が画面のトップになるようにスクロール
zz現在のカーソル位置が画面の中央になるようにスクロール
編集x文字削除
dd行削除
Dカーソル位置から行末まで削除
J次の行と連結する(カレント行の改行等削除)
~カーソル位置の文字の大文字/小文字を切換える (a -> A and A -> a)
<C-a>カーソル位置の数字を1つ増やす(0x100という形なら16進数と見なしてくれる)
<C-x>カーソル位置の数字を1つ減らす
>カーソル位置の行をインデントする(複数行選択中でも利用可)
<カーソル位置の行を逆インデントする(複数行選択中でも利用可)
diXXで囲まれた範囲を削除する。
例1) foo="bar" といった文字列があり bar の辺りにカーソルがある場合 di" でbarが削除される。
例2) res.send({foo:1,bar:2}) といった文字列があり foo 辺りにカーソルがある場合 di{ や di( で括弧内の文字が削除される。
範囲は複数行でも上手く機能する。
gg=Gインデントの体裁を整える。
ファイルの先頭に移動し(gg)、= によるインデントの修正をG(ファイルの末尾)まで行う。
UNDOuUNDO
<C-r>REDO
検索/keywordkeywordを検索する
n次のkeywordに移動する
N前のkeywordに移動する
置換:%s/from/to/[g]全行に対してfromtoに置換する。(gをつけると行中で複数マッチする。)
:n1,n2s/from/to/[g]n1行目からn2行目の範囲に対してfromtoに置換する。(nに . を指定するとカレント行、$ は最終行の意味になる)
レジスタを使うqxレジスタxへコマンドの記録を開始する。(レジスタに利用出来るのは a-z の26文字)
qXレジスタxへコマンドの追記を開始する。(通常レジスタは小文字を使うが、大文字への記録は追記になる)
q(記録中に)記録を終了する。
@xレジスタxに記録されたコマンドを再生する。
@@最後に実行したレジスタを再生する。
ビジュアルモードvカーソルで範囲選択が出来るようになる
範囲選択中はyやdで範囲のyankや切り取りが出来るし、インデントや置換や検索など殆んどのコマンドが矩形内で効果を発揮できます
V行選択モード
<C-v>矩形(ボックス)選択モード

以下のような3行を行末まで選択するには $ する。
****
*******
**
viXXで囲まれた範囲を削除する。
例1)foo="bar" といった文字列があり bar の辺りにカーソルがある場合 vi" でbarが選択される。
例2)res.send({foo:1,bar:2}) といった文字列があり foo 辺りにカーソルがある場合 vi{ や vi( で括弧内の文字が選択される。
範囲は複数行でも上手く機能する。
gv最後の選択範囲を選択しなおす(間違えてESC押したりして選択範囲がクリアされてしまった時などに使う)
矩形選択中 I xxx ESC ESC矩形内の各行の先頭位置に縦に同じ文字(xxx)を挿入する
画面分割:sp画面を水平に分割する
:vsp画面を垂直に分割する
<C-w><C-w>分割したウィンドウ間を順番に移動する。
<C-w>{h,j,k,l}分割したウィンドウ間を{上,下,左,右}に移動する
<C-w>{H,J,K,L}カーソルのあるウィンドウ位置を一番{上,下,左,右}に移動する
:qウィンドウを閉じる。
:qallすべてのウィンドウを閉じて終了する
:onlyカーソルのあるウィンドウ以外を全部閉じる。
<C-w>+ウィンドウサイズを増やす。
<C-w>-ウィンドウサイズを減らす。
<C-w>o今のウィンドウ以外を閉じる
ファイル:q[!]閉じる(保存しないで編集を破棄してでも閉じる)
:w[!]保存(読み込み専用ファイルでも保存する)
ZZ保存して閉じる
複数ファイル:new|edit filefileを開く
:lsバッファ一覧表示
:bp前のバッファ
:bn次のバッファ
:bdバッファを消す
ディレクトリ移動:cd pathカレントディレクトリを path に移動する。
:cd %:hカレントディレクトリを現在編集中のファイルのあるパスへ移動する。
システムコマンド:!cmdcmdを実行してステータスラインの下へ結果を表示(編集中のバッファには影響しない)
:範囲指定!cmd選択範囲のバッファをcmdの標準入力に流し込み、代わりにcmdの出力で置換する。
例えば :%!sort を実行すればバッファ全行がsortされる。
:r!cmdcmdを実行して標準出力をカーソル位置へ挿入
その他ga
:ascii
カーソル位置の文字コードの値を調べる。
:!cmd外部プログラムを実行する
:r!cmd外部プログラムの実行結果(標準出力)を挿入する
q:
q/
編集可能なコマンド/検索モード
通常コマンドや検索の履歴は上下カーソルで1行ずつしか辿れないけど、これを使うと履歴が複数行で見られるしコピペや編集も可能です。で、最後の行にコマンドを入力してEnterすればコマンドが実行できます。

設定関連

オプション一覧

誰か親切な人が ./options に纏めてくれました。

よく設定ファイルに書くコマンド

  • 頭の : は省略してます。
  • set ほげほげ系は noほげほげ というように頭に no を付ける事でその機能の off/on を行います。
検索関連set ignorecase検索文字列が小文字の場合は大文字小文字を区別なく検索する
set smartcase検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan検索時に最後まで行ったら最初に戻る
set noincsearch検索文字列入力時に順次対象文字列にヒットさせない
装飾関連set number行番号を表示させる
set nolistタブや改行を表示しない(表示する場合は行末が$、TABが^Iで表示される)
set tabstop=4タブ幅を4文字にする
set shiftwidth=4cindentやautoindent時に挿入されるタブの幅(tabstop と揃えておくと良い)
set showmatch括弧入力時の対応する括弧を表示
syntax onシンタックスハイライトを有効にする
set hlsearch検索結果文字列のハイライトを有効にする
set laststatus=2ステータスラインを常に表示(編集中のファイル名が常に確認できるようになる)
set showcmd入力中のコマンドをステータスに表示する
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8Pステータスラインに文字コードと改行文字を表示する
その他set hid編集中の内容を保ったまま別の画面に切替えられるようにする(デフォルトだと一度保存しないと切り替えられない)

よく使うマップ定義

僕(=KaWaZ)が普段設定しているマップ定義です。

F2map <F2> <ESC>:bp<CR>前のバッファ
F3map <F3> <ESC>:bn<CR>次のバッファ
F4map <F4> <ESC>:bw<CR>バッファを削除する
jnnoremap j gj表示行単位で行移動するようにする
knnoremap k gk

オプション一覧

これ以外のオプション一覧は ./options にあります。

ただし、最新バージョンの全てのオプションを網羅できていないかもしれません。

Tips

文字コードの自動認識

以下を .vimrc に書いておけば日本語の文字コード識別は多分完璧 :D

" 文字コードの自動認識
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

vim の文字コード判定の仕組みは以下の通りです。

  • fileencodings の設定を前から順に試してはじめにマッチしたものが採用される
  • encoding や fileencoding の設定値が途中に発見されるとそこで判定を止めてしまい後の設定は無視される
    • この動作により、UNIX環境(euc-jpの場合)では euc-jp が fileencodings の前の方に設定されていると、cp932 や utf-8 で書いたファイルが文字化けてしまうので気をつける必要がある。
  • encoding に設定される文字コードは fileencodings に見つからなかったときのデフォルト値に使われるので fileencodings に設定する必要は無い。

上記の設定では実行環境に合わせてそれらが吸収できるので windows 環境でも unix 環境でも上手く判定できる。

■追記

  • EUC-JPで「〜(波線)」が文字化ける問題を修正(eucjp-msが使える場合はそれを使うように)した。 2006-10-06 (金) 02:24
  • fileencoding=utf-8で編集中、□や○があるとその行でカーソル位置がずれる問題があったのだが、解決する設定(ambiwidth=double)を追加した。 2006-11-17 (金) 21:48
  • 日本語を含まないファイルを開いたときにfileencodingがiso-2022-jpになってしまう問題があったが、日本語の有無を再チェックしてより望ましい値(encodingの値)をfileencodingに設定するようにした。 2007-01-10 (水) 11:38

文字コードを指定してファイルを開きなおす

普通は上記の自動認識で問題ないと思うが、それでも文字化けする場合や、わざと違う文字コードで開いてみたい場合に使う。

例えば以下のようにするとeuc-jpでファイルを開き直せる。

:e ++enc=euc-jp

文字コードを変更して保存する

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

:set fileencoding=cp932

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

改行コードの自動認識

以下を .vimrc に書いておけばよい。

set fileformats=unix,dos,mac

新規ファイルの場合 fileformats の最初の改行コードが使われるようなので好みにより順番を変えます。
順番を変えても自動判定が失敗することは経験上無いようです。

改行コードを変更する

:set fileformat=改行コードの種類

ff は fileformat の短い形式なので ff でも良い。
改行コードの種類で指定できるのは dos, max, unix の3つです。

例)Windows形式の改行コードに変更するには以下のようにします。

:set fileformat=dos

改行コードの見分け方(UNIX環境前提)

改行コードが unix でない場合、^M という文字が大量に表示されることがあります。これは mac で使われる改行文字です。 これを見たらきっと改行コードが違うんだなと思ってください。

見分け方は以下の通りです。

  1. 普通に改行されていて特に問題を感じない → 改行コードは unix
  2. 全ての行末に ^M がくっついている → 改行コードは dos
  3. ^M が沢山表示されるうえに全てが1行に表示されてしまう → 改行コードは mac

改行コードが分かったら以下を実行すれば正常に表示されるようになります。(dosと分かった場合)

:e ++ff=dos

検索語が画面の真ん中に来るようにする

.vimrc に以下のようなキーマッピングを書いておきます。

nmap n nzz 
nmap N Nzz 
nmap * *zz 
nmap # #zz 
nmap g* g*zz 
nmap g# g#zz

解説:zz はカレント行を画面の中心にします。 (つまり n で検索語にカーソル移動したら勝手に zz でカレント行が画面の真ん中なるようにスクロールされるようになる)

暗号化

vim は単体で PKZIP とかと同じ暗号化アルゴリズムでファイルを暗号化することが出来ます。

  1. ファイルを暗号化する
    1. 暗号化したいファイルを以下のように -x オプションを付けて起動します。
      vim -x secret.txt
    2. 起動すると暗号化に使うパスワードの入力を求められます。確認の為2回聞かれます。
    3. 開いたら今まで通り普通にファイルの編集画面になります。
    4. このまま普通に :w などで保存すればファイルは暗号化して保存されます。
  2. 暗号化されたファイルを編集する
    1. vim によって暗号化されたファイルを開くには普通に vim で開くだけです。
      vim secret.txt
    2. 起動時にパスワードを要求するプロンプトが出るので正しいパスワードを入れれば普通に開いて編集できます。
    3. 間違ったパスワードを入れても復号化されますがそれは意味の無い只のバイナリデータに見えるはずです。
  3. 暗号化を解除する、もしくはパスワードを変更する。
    1. まずは普通に起動してパスワードを入力してファイルを開きます。
    2. 以下のコマンドを実行すると新しいパスワードを要求されます。
      :X
    3. パスワードの変更後は普通に保存すれば新しいパスワードで暗号化されて保存されます。
    4. 暗号化を解除したい場合は :X でパスワードを空(何も入力せずにEnter)にして保存するだけです。
  4. 注意点
    1. 保存されたファイルは暗号化されますが、スワップファイルは暗号化されません。それを読むことが出来る人はパスワードを知らなくても内容を見ることが出来ます。
      1. vim の起動時に -n を付けて起動すればスワップファイルは作成されません。

バイナリ編集

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

探してみたところこのサイトで xxd を使ってバイナリ編集をする方法を紹介していたので試してみたところ便利そうなのでメモ。
但しそのままだと少し問題があった*1 のでそれを修正した版が以下の設定です。

"バイナリ編集(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

その他

最近の .vimrc

file.vimrc

プラグイン

cvscommand

cvs が便利になる。

VimIRC

vim で IRC。

tabbar.vim

バッファをタブで表示

リンク

コメント

  • putty 繋げてリモートでvim使ってるときにIME使うとよくいらつくので、keylay21でキーボードレイアウトを変えると便利。 -- KaWaZ 2003-08-14 (木) 18:15:41
  • :diffsplit を知った。便利だ。 -- KaWaZ 2003-10-30 (木) 18:22:17
  • cvscommand プラグインいいな -- 2004-02-17 (火) 20:29:01
  • 文字コード自動認識だが、Fedora Core の日本語環境は UTF-8 な為、その場合も対応できるように修正した。 -- KaWaZ 2004-05-25 (火) 18:21:41
  • 参考にさせてもらいます。ありがとう。 -- sakuramateo? 2005-10-14 (金) 13:01:39
  • 通りすがりですが、参考にさせていただきました。ありがとうございます。あと、Wikiは凍結した方がいいですよー -- kiyoji? 2005-11-24 (木) 16:09:37
    • 凍結無しで2年以上ですが今のところ問題がおきたことも無く間違い等を修正加筆してモラウことも多いので善意に任せてます。裏でバックアップは取ってますし問題が起きてからで考えようかな〜と。 -- KaWaZ 2005-11-28 (月) 19:08:28
  • ありがとう -- 2006-01-14 (土) 15:59:36
  • 誰か親切な人が ./options の解説を入れてくれたようだ。ありがとう! -- KaWaZ 2006-03-23 (木) 16:18:26
    • 古いバージョンの物なので、最新のものと差があるかも知れません。 -- 2006-03-23 (木) 18:51:10
  • 私もgoogle検索通りすがりですが、「文字コードの自動認識」非常に助かりました。有難う御座いました。 -- mick? 2006-08-09 (水) 16:10:48
  • 「文字コードの自動認識」を使用していますが、EUC-JPのファイルで〜を使用すると化けますが、これはUTF-8→EUC-JPの限界ですか? -- 通りすがり? 2006-10-04 (水) 10:56:36
    • 指摘サンクスです。EUC-JPのファイルで〜等の文字を使えるようにしました。(iconvがeucjp-msに対応していれば) -- KaWaZ 2006-10-06 (金) 02:32:31
    • ついでにencodingがeucjpだった場合の処理が間違ってたのでそれも修正しました。添付の .vimrc も修正してあります。 -- KaWaZ 2006-10-06 (金) 02:32:31
  • 文字コードの自動認識素晴らしすぎです・・、ありがとうございます。 -- kerberos? 2006-10-17 (火) 10:45:09
  • UTF-8のファイルで□や○を使うとカーソル位置がずれる問題を解決した件を文字コードの自動認識に追記しました。 -- KaWaZ 2006-11-17 (金) 21:55:44
  • 文字コードの自動認識で、新規作成は期待通りEUC-JPになるのですが、日本語を含まないファイルを開いた時にISO-2022-JPになってしまうのが困っています。fileencodingsの先頭にEUC-JPを書くと自動認識されなくなってしまいますし、難しいですね。 -- 2006-12-07 (木) 00:20:41
    • ISO-2022-JPとして認識した時に本当に日本語が含まれているかどうかをチェックして、日本語が含まれていなかったらencodingの値をfileencodingに使うように修正してみました。これにより日本語を含まないファイルでも eucjp がデフォの環境では eucjp が、utf-8 な環境では utf-8 で開けるようになりました。-- KaWaZ 2007-01-10 (水) 11:23:49
    • ありがとうございます。同じファイルがeuc-jpになったりeucjp-msになったりしますが、実用上問題ないのでこのまま使わせていただきます。 -- 2007-02-12 (月) 10:35:35
  • 以前、通りすがりで参考にさせていただいた者です。そうですか、2年以上も凍結なしで問題ないんですね。私もPukiwikiを使っていますが、以前クローラーにやられ、せっかく書いた内容が消えてしまったことがあったもので・・・しかし、このページはよくまとまっていますよね。また参考にさせていただきました!ありがとうございます -- kiyoji? 2007-01-18 (木) 09:08:57
  • 参考にさせてもらっています。 ありがとう! -- stargazer? 2007-03-12 (月) 18:15:21
  • 最近SPAMが増えたので編集になんちゃって認証を付けました。BASIC認証で guest/guest を入力すれば誰でも編集できます。 -- KaWaZ 2007-08-06 (月) 16:59:46
  • 文字コード自動認識使わせてもらってます。ありがとうございます。 -- Kiske? 2007-12-26 (水) 10:57:10
  • 最近のvimrcにあるexists("syntax")のsyntaxは、いつ設定されることを意図しているのか教えて貰えないでしょうか。 -- おじぃ? 2008-04-25 (金) 09:03:05
  • 個人的事情により古いバージョンのvimだかviを使うときがあり、そこでは syntax が使えない(syntax on を実行するとエラーになってしまう)んです。なので、syntax というオプションが使えるかどうかを確認してから syntax on を実行するようにしてあるわけです。まぁ今時の環境しか使わないのであれば exsists の if 文は無くて良いと思いますよ。>おじぃ様 -- KaWaZ 2008-04-26 (土) 22:37:33
  • お礼が大分遅れてしまって申し訳ありません。exists("syntax")の解説ありがとうございます。質問する前に自分で調べたところその場合はhas("syntax")を使い、existsはletで定義した変数などの存在確認に使うものだと考えてました。もう少し勉強してみます。ありがとうございました。 -- おじぃ? 2008-05-13 (火) 07:50:20
  • ぐは exists("syntax") の件、確かに has が正しいですね。指摘ありがとうございます。…かなり恥ずかしい(^^; -- 2008-05-18 (日) 12:50:02
  • 助かりました。ありがとうございます。 -- まき? 2008-07-11 (金) 15:47:16
  • ++encが何かは分からないのですが:view ++enc=sjisこうゆう事も出きるんですね.見れないファイルがあって参考に成りました. -- en? 2008-08-20 (水) 20:44:46
  • .vimrc頂きました。感謝感激多謝霰です。 -- kotaoue? 2009-10-09 (金) 22:25:39

*1 但し上記サイトの設定では *.bin というファイルに対しては「xxdバイナリモード」が発動するのですが、vim -b で起動した場合では「xxdバイナリモード」が効きません。

添付ファイル: file.vimrc 738件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-03-31 (木) 14:44:21 (2082d)