GitHub

VimMemo

自分のためのvi(vim)覚え書き。

もっと詳しいことはVim日本語ドキュメントをどうぞ。

コマンド

編集開始

i挿入(カーソル位置から編集)
I行頭(空白除く)に挿入
a追加(カーソルの次から編集)
A行末に挿入
R上書き変更
o,O新しい行を開く

編集終了

ESCコマンドモードへ
ZZ,:wq保存して終了
:q!保存せず終了

カーソル移動

hjkl上下左右
w次の語頭へ ( W:記号類を無視)
b前の語頭へ ( B: 〃 )
e次の語尾へ ( E: 〃 )
ge前の語尾へ(gE: 〃 )
$行末へ
0行頭へ
^行頭(空白除く)へ
fx次の「x」へ (find, xは任意の文字) (F:逆方向、「;」で繰り返し、「,」で逆方向に繰り返し)
tx次の「x」の直前へ (to, xは任意の文字) (T:逆方向、「;」で繰り返し、「,」で逆方向に繰り返し)
%対応する括弧へ (カーソルが括弧の上にない場合は、次の括弧へ)

行移動

G最終行へ
33G33行目へ
gg最初の行へ(=1G)
33%ファイルの前から33%の行へ
H画面上の最初の行へ(Home)
M画面上の中央の行へ(Middle)
L画面上の最後の行へ(Last)
``直前の行(マーク)へ戻る

マーク

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

スクロール

Ctrl-f, Ctrl-b1画面スクロール(forward, back)
Ctrl-u, Ctrl-d画面の半分だけスクロール
Ctrl-e, Ctrl-y1行だけスクロール
zt, z<Enter>カーソル行を画面の最初に
zz, z.カーソル行を画面の中央に
zb, z-カーソル行を画面の最後に

削除

xカーソル位置の1文字を削除
Xカーソル左の1文字を削除
dw1単語削除
dd1行削除
D行末まで削除(=d$)
dawカーソル位置の単語を削除(空白含む) (d + a word)
diwカーソル位置の単語を削除 (d + inner word)
dab or da( or da)(d + a bracket)
dib or di( or di((d + inner bracket)

変更

cw1単語変更
C行末まで変更(=c$)
s1文字消して変更開始(=xi)
S,cc1行変更
r1文字変更
J次の行をくっつける
.直前の変更を繰り返す
xp2文字の入れ替え (emacsにおけるC-t)

選択・コピー・貼り付け

vvisualモードへ(hjklで範囲選択)
V行全体を選択してvisualモードへ
Ctrl-Vvisualモードへ(矩形選択)
o,O(visualモード中)選択範囲の四隅へ移動
yw1単語コピー(yank)
Y,yy行全体をコピー
p貼り付け(put)
Pカーソルの前に貼り付け

検索

/後方検索 (.*[]^%/\?~$ は、特別な意味をもつので「\.」のようにエスケープが必要)
?前方検索
n再検索
N逆方向に再検索
*カーソル位置の単語を検索
#カーソル位置の単語を逆方向に検索
Ctrl-O前の場所に戻る
Ctrl-I次の場所に進む

アンドゥ

uアンドゥ
U行をまとめてアンドゥ
Ctrl-Rリドゥ

補完

Ctrl-P単語の補完(前方)
Ctrl-N単語の補完(後方)

インデント

==この行をインデント
vで選択中に=選択範囲をインデント
>>この行のインデントを増やす
<<この行のインデントを減らす

ヘルプモード

Ctrl-]リンクをたどる(help)
Ctrl-T or O前のページに戻る(help)

ウィンドウ分割

:sp(lit)水平分割(EmacsのC-x 2)
^Wv垂直分割(Vertical)
^Woこの窓だけにする(Only, EmacsのC-x 1)
^Wqこの窓を閉じる(Quit, EmacsのC-x 0)
^W^W別の窓へ(EmacsのC-x o)
^W+, ^W-高さの調整 (8^W+ とかも可)
^W<, ^W>幅の調整 (30^W< とかも可)
^W=同じ大きさに戻す

バッファ、ファイル

:e ファイル名新しいファイルを編集
:b0, :b1, ...バッファ0,1,..に移動
Ctrl-^, :b#直前のバッファに移動
:buffers編集中のバッファ一覧を表示
:rあるファイルの内容をカーソル位置にペースト
:aインデントそのままで貼り付け(:a → マウスでvimに貼り付け → ESCで終了)

その他

Ctrl-Gカーソル位置などの表示

tips

このウィンドウだけcdしたいんだけど

:lcd ~/foo/bar

とすると、あるウィンドウだけcdできる。

ウィンドウを縦分割して、左右で違うディレクトリで作業したいときとかに便利。

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

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

ffはfileformatの略。

なお、dosとunixの改行コードが混在しているようなファイルについては、上のコマンドを実行しても 正しく認識されないことがある。この場合は手作業(もしくはワンライナ等)で直すしかない。

 ruby -e 'print ARGF.read.gsub(/\r\n/,"\n")' < before.txt > after.txt

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

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

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

頻繁に誤認識が起こるときは、ずんWikiの設定を~/.vimrc (or %HOME%\_vimrc)にコピーしておくと良い。

あるファイルの種類を指定したいとき

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

ftはfiletypeの略。

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

vim:set ft=html:

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

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

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

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

とか。

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

:'<,'>!ruby ...

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

キーボードマクロを使う

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

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

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

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

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

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

set guicursor=a:blinkon0

from http://moriq.tdiary.net/20051027.html#p01

vim-latex

詳しいことはこのへんを参照

  • コマンドモードで\ll とすると自動コンパイル、\lvとするとプレビュー
  • 編集モードで「EIT」(element itemize)と書くと、EITが
\begin{itemize}
        \item
\end{itemize}<++>

に置き換えられて、\itemのあとにカーソルが移動する。

最後の<++>は何なのかというと、箇条書きの内容を書き終わったあとに「C-j」を押すと、<++>が消えてそこにカーソルが移動するのである。要するに、begin〜endから出るためにノーマルモードに戻ってカーソルを移動させる必要がない、ということ。

EITでitemizeのほか、EVMでverbatim, EENでenumerate, SSEでsection, SSSでsubsection, SS2で subsubsection、などなど。

小ネタ

  • 「*」でカーソル下の単語を検索 (「#」で上方向に検索)
  • Ctrl-a, Ctrl-xで数値の増減ができる

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

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

abc ⇔ ABC

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

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

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

最後に実行したコマンドをもっかい実行する

「@:」で。

配色が気に入らない、なんか新しい色テーマないの?

colorscheme [TAB] で選択可能な色テーマが表示される。

新しい色テーマを探すならVim Color Scheme Test が便利(多少重いので注意)。

http://mono.kmc.gr.jp/~yhara/d/?date=20060907#p02

source: VimMemo.hd
View on github | Report issue