Ads
よく使うコマンド †
| カーソル移動 | h | ← |
| j | ↓ |
| k | ↑ |
| l | → |
| <C-f> | PageDown |
| <C-b> | PageUp |
| gg | ファイルの先頭へ移動 |
| G | ファイルの末尾へ移動 |
| ^ | 行頭へ移動 |
| $ | 行末へ移動 |
| H | 画面上の1行目へ移動(2Hで2行目へ) |
| M | 画面中央行へ移動 |
| L | 画面上の最下行へ移動(2Lで下から2行目へ) |
| % | 対応する括弧へ移動 |
| z<enter> | 現在のカーソルがページのトップになる |
| 編集 | x | 文字削除 |
| dd | 行削除 |
| D | カーソル位置から行末まで削除 |
| J | 次の行と連結する(カレント行の改行等削除) |
| ~ | カーソル位置の文字の大文字/小文字を切換える (a -> A and A -> a) |
| <C-a> | カーソル位置の数字を1つ増やす(0x100という形なら16進数と見なしてくれる) |
| <C-x> | カーソル位置の数字を1つ減らす |
| > | カーソル位置の行をインデントする |
| < | カーソル位置の行を逆インデントする |
| gg=G | インデントの体裁を整える。 ファイルの先頭に移動し(gg)、= によるインデントの修正をG(ファイルの末尾)まで行う。 |
| UNDO | u | UNDO |
| <C-r> | REDO |
| 検索 | /keyword | keywordを検索する |
| n | 次のkeywordに移動する |
| N | 前のkeywordに移動する |
| 置換 | :%s/from/to/[g] | 全行に対してfromをtoに置換する。(gをつけると行中で複数マッチする。) |
| :n1,n2s/from/to/[g] | n1行目からn2行目の範囲に対してfromをtoに置換する。(nに . を指定するとカレント行、$ は最終行の意味になる) |
| レジスタを使う | qx | レジスタxへコマンドの記録を開始する。(レジスタに利用出来るのは a-z の26文字) |
| qX | レジスタxへコマンドの追記を開始する。(通常レジスタは小文字を使うが、大文字への記録は追記になる) |
| q(記録中に) | 記録を終了する。 |
| @x | レジスタxに記録されたコマンドを再生する。 |
| @@ | 最後に実行したレジスタを再生する。 |
| ビジュアルモード | v | カーソルで範囲選択が出来るようになる(y や d で yank や切り取りが出来る) |
| V | 行選択モード |
| <C-v> | ボックス選択モード
以下のような3行を行末まで選択するには $ する。 **** ******* ** |
| gv | 最後の選択範囲を選択しなおす(間違えてESC押したりして選択範囲がクリアされてしまった時などに使う) |
| 画面分割 | :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 file | fileを開く |
| :ls | バッファ一覧表示 |
| :bp | 前のバッファ |
| :bn | 次のバッファ |
| :bd | バッファを消す |
| ディレクトリ移動 | :cd path | カレントディレクトリを path に移動する。 |
| :cd %:h | カレントディレクトリを現在編集中のファイルのあるパスへ移動する。 |
| システムコマンド | :!cmd | cmdを実行してステータスラインの下へ結果を表示(編集中のバッファには影響しない) |
| :範囲指定!cmd | 選択範囲のバッファをcmdの標準入力に流し込み、代わりにcmdの出力で置換する。 例えば :%!sort を実行すればバッファ全行がsortされる。 |
| :r!cmd | cmdを実行して標準出力をカーソル位置へ挿入 |
| その他 | ga :ascii | カーソル位置の文字コードの値を調べる。 |
| :!cmd | 外部プログラムを実行する |
| :r!cmd | 外部プログラムの実行結果(標準出力)を挿入する |
設定関連 †
オプション一覧 †
誰か親切な人が ./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=4 | cindentや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)が普段設定しているマップ定義です。
| F2 | map <F2> <ESC>:bp<CR> | 前のバッファ |
| F3 | map <F3> <ESC>:bn<CR> | 次のバッファ |
| F4 | map <F4> <ESC>:bw<CR> | バッファを削除する |
| j | nnoremap j gj | 表示行単位で行移動するようにする |
| k | nnoremap k gk |
オプション一覧 †
これ以外のオプション一覧は ./options にあります。
ただし、最新バージョンの全てのオプションを網羅できていないかもしれません。
Tips †
文字コードの自動認識 †
以下を .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
vim の文字コード判定の仕組みは以下の通りです。
- fileencodings の設定を前から順に試してはじめにマッチしたものが採用される
- encoding や fileencoding の設定値が途中に発見されるとそこで判定を止めてしまい後の設定は無視される
- この動作により、UNIX環境(euc-jpの場合)では euc-jp が fileencodings の前の方に設定されていると、cp932 や utf-8 で書いたファイルが文字化けてしまうので気をつける必要がある。
- encoding に設定される文字コードは fileencodings に見つからなかったときのデフォルト値に使われるので fileencodings に設定する必要は無い。
上記の設定では実行環境に合わせてそれらが吸収できるので windows 環境でも unix 環境でも上手く判定できる。
■追記
- EUC-JPで「〜(波線)」が文字化ける問題を修正(eucjp-msが使える場合はそれを使うように)した。
- fileencoding=utf-8で編集中、□や○があるとその行でカーソル位置がずれる問題があったのだが、解決する設定(ambiwidth=double)を追加した。
- 日本語を含まないファイルを開いたときにfileencodingがiso-2022-jpになってしまう問題があったが、日本語の有無を再チェックしてより望ましい値(encodingの値)をfileencodingに設定するようにした。
文字コードを指定してファイルを開きなおす †
普通は上記の自動認識で問題ないと思うが、それでも文字化けする場合や、わざと違う文字コードで開いてみたい場合に使う。
例えば以下のようにすると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 で使われる改行文字です。
これを見たらきっと改行コードが違うんだなと思ってください。
見分け方は以下の通りです。
- 普通に改行されていて特に問題を感じない → 改行コードは unix
- 全ての行末に ^M がくっついている → 改行コードは dos
- ^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 とかと同じ暗号化アルゴリズムでファイルを暗号化することが出来ます。
- ファイルを暗号化する
- 暗号化したいファイルを以下のように -x オプションを付けて起動します。
vim -x secret.txt
- 起動すると暗号化に使うパスワードの入力を求められます。確認の為2回聞かれます。
- 開いたら今まで通り普通にファイルの編集画面になります。
- このまま普通に :w などで保存すればファイルは暗号化して保存されます。
- 暗号化されたファイルを編集する
- vim によって暗号化されたファイルを開くには普通に vim で開くだけです。
vim secret.txt
- 起動時にパスワードを要求するプロンプトが出るので正しいパスワードを入れれば普通に開いて編集できます。
- 間違ったパスワードを入れても復号化されますがそれは意味の無い只のバイナリデータに見えるはずです。
- 暗号化を解除する、もしくはパスワードを変更する。
- まずは普通に起動してパスワードを入力してファイルを開きます。
- 以下のコマンドを実行すると新しいパスワードを要求されます。
:X
- パスワードの変更後は普通に保存すれば新しいパスワードで暗号化されて保存されます。
- 暗号化を解除したい場合は :X でパスワードを空(何も入力せずにEnter)にして保存するだけです。
- 注意点
- 保存されたファイルは暗号化されますが、スワップファイルは暗号化されません。それを読むことが出来る人はパスワードを知らなくても内容を見ることが出来ます。
- 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 †
.vimrc
プラグイン †
cvs が便利になる。
vim で IRC。
バッファをタブで表示
リンク †
コメント †
- putty 繋げてリモートでvim使ってるときにIME使うとよくいらつくので、keylay21でキーボードレイアウトを変えると便利。 -- KaWaZ 2003-08-14 (木) 18:15:41
- :diffsplit を知った。便利だ。 -- KaWaZ
- cvscommand プラグインいいな --
- 文字コード自動認識だが、Fedora Core の日本語環境は UTF-8 な為、その場合も対応できるように修正した。 -- KaWaZ
- 参考にさせてもらいます。ありがとう。 -- sakuramateo?
- 通りすがりですが、参考にさせていただきました。ありがとうございます。あと、Wikiは凍結した方がいいですよー -- kiyoji?
- 凍結無しで2年以上ですが今のところ問題がおきたことも無く間違い等を修正加筆してモラウことも多いので善意に任せてます。裏でバックアップは取ってますし問題が起きてからで考えようかな〜と。 -- KaWaZ
- ありがとう --
- 誰か親切な人が ./options の解説を入れてくれたようだ。ありがとう! -- KaWaZ
- 古いバージョンの物なので、最新のものと差があるかも知れません。 --
- 私もgoogle検索通りすがりですが、「文字コードの自動認識」非常に助かりました。有難う御座いました。 -- mick?
- 「文字コードの自動認識」を使用していますが、EUC-JPのファイルで〜を使用すると化けますが、これはUTF-8→EUC-JPの限界ですか? -- 通りすがり?
- 指摘サンクスです。EUC-JPのファイルで〜等の文字を使えるようにしました。(iconvがeucjp-msに対応していれば) -- KaWaZ
- ついでにencodingがeucjpだった場合の処理が間違ってたのでそれも修正しました。添付の .vimrc も修正してあります。 -- KaWaZ
- 文字コードの自動認識素晴らしすぎです・・、ありがとうございます。 -- kerberos?
- UTF-8のファイルで□や○を使うとカーソル位置がずれる問題を解決した件を文字コードの自動認識に追記しました。 -- KaWaZ
- 文字コードの自動認識で、新規作成は期待通りEUC-JPになるのですが、日本語を含まないファイルを開いた時にISO-2022-JPになってしまうのが困っています。fileencodingsの先頭にEUC-JPを書くと自動認識されなくなってしまいますし、難しいですね。 --
- ISO-2022-JPとして認識した時に本当に日本語が含まれているかどうかをチェックして、日本語が含まれていなかったらencodingの値をfileencodingに使うように修正してみました。これにより日本語を含まないファイルでも eucjp がデフォの環境では eucjp が、utf-8 な環境では utf-8 で開けるようになりました。-- KaWaZ
- ありがとうございます。同じファイルがeuc-jpになったりeucjp-msになったりしますが、実用上問題ないのでこのまま使わせていただきます。 --
- 以前、通りすがりで参考にさせていただいた者です。そうですか、2年以上も凍結なしで問題ないんですね。私もPukiwikiを使っていますが、以前クローラーにやられ、せっかく書いた内容が消えてしまったことがあったもので・・・しかし、このページはよくまとまっていますよね。また参考にさせていただきました!ありがとうございます -- kiyoji?
- 参考にさせてもらっています。 ありがとう! -- stargazer?
- 最近SPAMが増えたので編集になんちゃって認証を付けました。BASIC認証で guest/guest を入力すれば誰でも編集できます。 -- KaWaZ
- 文字コード自動認識使わせてもらってます。ありがとうございます。 -- Kiske?
- 最近のvimrcにあるexists("syntax")のsyntaxは、いつ設定されることを意図しているのか教えて貰えないでしょうか。 -- おじぃ?
- 個人的事情により古いバージョンのvimだかviを使うときがあり、そこでは syntax が使えない(syntax on を実行するとエラーになってしまう)んです。なので、syntax というオプションが使えるかどうかを確認してから syntax on を実行するようにしてあるわけです。まぁ今時の環境しか使わないのであれば exsists の if 文は無くて良いと思いますよ。>おじぃ様 -- KaWaZ
- お礼が大分遅れてしまって申し訳ありません。exists("syntax")の解説ありがとうございます。質問する前に自分で調べたところその場合はhas("syntax")を使い、existsはletで定義した変数などの存在確認に使うものだと考えてました。もう少し勉強してみます。ありがとうございました。 -- おじぃ?
- ぐは exists("syntax") の件、確かに has が正しいですね。指摘ありがとうございます。…かなり恥ずかしい(^^; --
- 助かりました。ありがとうございます。 -- まき?
- ++encが何かは分からないのですが:view ++enc=sjisこうゆう事も出きるんですね.見れないファイルがあって参考に成りました. -- en?
- .vimrc頂きました。感謝感激多謝霰です。 -- kotaoue?