ユーザ用ツール

サイト用ツール


tools:vi

vi

コマンド系

  • 以前実行したコマンドを vi のウィンドウ上で編集して実行

:control + f

  • 編集を中断する

control + c, control + c

  • 修正した ~/.vimrc の内容を即座に反映させる。

:source ~/.vimrc

ファイル系

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

:e ++enc=文字コード

 (例):e ++enc=sjis 
* 文字コードを変更して保存する\\ 
  :set fileencoding=utf-8\\ 
  :set fenc=utf-8 
  * 指定可能な文字コード例\\ 
    utf-8, euc-jp, shift_jis 
* 改行文字を指定して保存する\\ 
  :set fileformat=dos\\ 
  :set ff=dos 
  * 指定可能な改行文字\\ 
    dos, mac, unix 
* バイナリモードで開く\\ 
   -b パラメータを付けてファイルを開き 
  <code>vi -b xxx.bin</code> 
  xxd コマンドを実行して、16進数表示し 
  <code>:%! xxd</code> 
  編集したら -r を付けて xxd コマンドを実行して表示モードを元に戻し 
  <code>:%! xxd -r</code> 
  保存する 
  <code>:w</code> 
* 開いているファイルを再読み込み\\ 
  :e! 
* カーソル位置のファイルを開く\\ 
  gf 

検索

  • 検索前の位置に戻る。
    • `` (バッククォートを 2つ)
    • Ctrl + O 押す都度戻る
    • Ctrl + I 押す都度進む
  • ヤンクした文字を検索欄にペースト

/ で検索開始

  Ctrl + r, " でペースト 
* 検索文字列を編集するバッファを表示\\ 
  q/ 
* 大文字・小文字 
  * 識別する: set ic 
  * 同一視する: set noic 

netrw

  • ファイル選択

mf

  • 選択したファイルを比較(最大3個まで)

md

表示系

  • ステータス行表示

(常に表示)

  (ファイル名、編集状態、読み取り専用、文字コード、改行コード、行番号) 
  <code>:set laststatus=2 

:set statusline=%<%f\ %m%r%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l/%L,%v</code>

編集系

  • 数字をカウントアップする。(1 ⇒ 2 ⇒ 3 …)

control + a

  • カーソル位置の文字を [大文字 ⇔ 小文字] 変換して、カーソル位置を次に進める。

~

  • カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を [大文字 ⇔ 小文字] 変換する。

g~[移動操作]

  • カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を[小文字]に変換する。

gu[移動操作]

  • カーソル位置から [移動操作(f + 文字、w, b 等)] までの文字を[大文字]に変換する。

gU[移動操作]

削除系

  • 行削除

dd

  • 3行削除

3dd

  • 行頭まで削除

d0

  • 行末まで削除

d$

  • 文頭まで削除

d1G

  • 文末まで削除

dG

Undo

  • undo

u

  • redo

control + r

移動系

  • 対括弧に移動

%

  • 画面内で移動
    • 画面の一番上に移動

H

  • 画面の真ん中に移動

M

  • 画面の一番上に移動

L

スクロール系

  • カーソル行がページの先頭にくるようにスクロール

zt または z + Enter

  • カーソル行がページの中央にくるようにスクロール

zz または z + .

  • カーソル行がページの先頭にくるようにスクロール

zb または z + -

  • 画面半分スクロール
    • 上 : Ctrl + d
    • 下 : Ctrl + u
  • 1行スクロール
    • 上 : Ctrl + y
    • 下 : Ctrl + e

置換

  • 置換後の文字列に改行文字を指定する。

Ctrl + v, m または Ctrl + v, Enter

  • 置換後の文字に ~(チルダ)を指定する。

\(バックスラッシュ)でエスケープする。

  • :% で行った変換をもう一度行う。

&

正規表現

  • 置換後に使う範囲を指定するためのかっこ '(', ')' はバックスラッシュ \ でエスケープする。

Mac の場合は option + ¥ で入力する。

複数ファイルにまたがった置換

 
:args **/*.txt 
:args 
:argdo %s/foo/bar/gc | update 

ウィンドウ

  • 分割

:sp

  • 分割したウィンドウ間の移動

ctrl + w, w

  ctrl  + w, p 
* カーソルがあるウィンドウのみにする\\ 
  ctrl + w, o\\ 
* カーソルがあるウィンドウを閉じる\\ 
  ctrl + w, c\\ 
* ひとつに戻す\\ 
  :q 

分割したウィンドウのサイズ調整

  • 同じサイズにする

ctrl + w, =

  • 垂直分割
    • カーソルがある方のウィンドウを大きくする

ctrl + w, +

    [数値]ctrl + w, +\\ 
  * カーソルがある方のウィンドウを小さくする\\ 
    ctrl + w, -\\ 
    [数値]ctrl + w, -\\ 
* 水平分割 
  * カーソルがある方のウィンドウを大きくする\\ 
    ctrl + w, >\\ 
    [数値]ctrl + w, >\\ 
  * カーソルがある方のウィンドウを小さくする\\ 
    ctrl + w, <\\ 
    [数値]ctrl + w, <\\ 

タブ

  • タブ幅を設定

:set tabstop=4

  :set ts=4 
* オートインデント\\ 
  :set autoindent\\ 
  :set ai 
* C言語を意識したオートインデント\\ 
  :set cindent 
* インデント幅\\ 
  :set shiftwidth=4\\ 
  :set sw=4 
* ソフトタブ\\ 
  :set expandtab 

copy & paste

  • 過去にyankした内容を貼付ける
    • 1つ前 “0p
    • 2つ前 “1p
  • yankの一覧を見る

:di

折りたたみ

  • 折りたたみの切り替え

za

  • すべての折りたたみを開く

zR

  • すべての折りたたみを閉じる

zM

実行系

  • 外部コマンドの実行結果をカーソル位置に取り込む

:r!<command> [<parameter>]

  • grep の検索結果を行番号付きで取り込む。

:r!grep -n <検索文字列> <対象ファイル>

grep

vimgrep

ファイルに対して

  • grep実行
:vimgrep /検索文字列/j 対象ファイル
  • ※「j」:最初にマッチしたファイルを開かない
  • ※対象ファイル:ワイルドカード使用可
:vimgrep /検索文字列/j 対象ファイル | cwin

または

  <code>:vim /検索文字列/j 対象ファイル | cw</code> 
  * 最後に「 | cwin」を付けると、検索後すぐに結果一覧が表示される 
  * 単語検索\\ 
    \<\>で検索文字列を囲む\\ 
    <code>:vim /\<検索文字列\>/j 対象ファイル | cw</code> 
  * ディレクトリ階層を再起的に検索\\ 
    ディレクトリ指定に %%**%% を入れると、そのディレクトリ階層以下のファイルが対象となる\\ 
    <code>:vim /検索文字列/j java/src/**/*.java | cw</code> 
* 検索結果の一覧ウィンドウを開く 
  <code>:copen</code> 
* 検索結果の一覧ウィンドウからファイルを開く\\ 
  カーソルを開きたいファイルに移動して Enter 
* Quickfix の操作\\ 
  * 次の検索結果に移動\\ 
    <code>:cn</code> 
  * 前の検索結果に移動\\ 
    <code>:cp</code> 
  * 開いたファイルを閉じる 
    <code>:ccl</code> 
* vimgrep 実行前にカレントディレクトリを変更する。 
  <code>:cd ~/doc/html</code> 

パッファに対して

  • すべてのバッファに対して grep 実行
:bufdo vimgrepadd /<検索文字列>/ %
  • 現在のバッファに対して grep 実行
:windo vimgrepadd /<検索文字列>/ %

grep コマンドを使う

  • 指定したディレクトリ以下を再帰的に大文字/小文字を区別せず検索して、結果をバッファに取り込む

:r! grep -ir –include “ファイルパターン” “検索文字列” <検索ディレクトリ>

  (例)<code>:r! grep -ir --include "*.rb" "connect" src</code> 
* 指定したディレクトリ以下を再帰的拡張正規表現で検索して、結果をバッファに取り込む\\ 
  :r! grep -Er --include "ファイルパターン" "検索文字列" <検索ディレクトリ>\\ 
  (例) <code>:r! grep -Er --include "*.java" "0x[0-9]+" src</code> 

ソート

  • 全体をソートする

:1,$!sort

  • 範囲指定してソートする

開始位置でマークする。

  1. (例) 開始位置にカーソルを置き、mx。(xでマークする)
  2. 終了位置で以下をタイプ。
:'x,.!sort
  • 行番号を指定してソートする。

(例) 10行目から20行目までをソート

  <code>:10,20!sort</code> 

スキーマ

  1. ~/.vim/colors ディレクトリを作成。
  2. 作成したディレクトリにカラースキーマファイルをコピー。
  3. :colorscheme <スキーマファイル名>

(ディレクトリ ~/.vim/colors/ と、拡張子 .vim は付けなくてよい)

  • 起動時にスキーマファイルを読み込む場合は、~/.vimrc に指定。

colorscheme <スキーマファイル名>

Tips

  • 複数の行頭に同じ文字列を挿入する。
    1. カーソルを行頭に移動。
    2. Ctrl + v で範囲選択。
    3. Shift + i を押して、挿入する文字列を入力。
    4. Esc で追加終了。

※行頭でなくとも良い。(行頭はイメージをつかみやすくするため)

  • 連番を入力する
r!jot -w'(\%d)' 10 
r!ruby -e 'puts (1..10).to_a.join("\n")'

Mac

  • コマンド行で正規表現を使う時などのエスケープ文字 '¥' は、option + ¥ で入力する。(バックスラッシュ)

diff

  • 2つのファイルを比較

プロンプトから

  <code>vimdiff <sourcefile> <targetfile></code> 
  または、比較元を開いている状態で 
  <code>:vertical diffsplit <target></code> 
  省略形\\ 
  <code>:vert diffs <target></code> 
* diff を実行してファイル比較し、結果をウィンドウに表示。 
  <code>:r!diff -s -X ~/tmp/diffexcludefiles.txt source/ target/</code> 
  (diffexcludefiles.txt の中身) 
  <code> 

*.gif
*.jar
*.exe
*.dll
</code>

初期設定

拡張子 rb に対して 2桁でのインデント設定

au BufNewFile,BufRead *.rb set tabstop=2 shiftwidth=2 
  • Unix系 vim の場合

~/.vimrc

  • Windows用 Kaoriya版 vim の場合

ホームディレクトリの _vimrc

Windows用 Kaoriya版 vim

画面のテーマ

colorscheme koehler 

ホームディレクトリの _gvimrc に記述

tools/vi.txt · 最終更新: 2012/02/03 19:18 (外部編集)