Vim 覚書

_images/vim.jpg

基本的な操作

VIMはモードを頻繁に変更して編集をします。 |

aキー で編集モード, ESPキー でノーマルモードに戻ります。

モード 機能
ノーマル カーソルの移動、テキストのコピー、カット、ペースト
入力 テキストの入力、編集。
コマンドライン vimエディタコマンドの実行. save, load など
ビジュアル テキストの選択
検索 モードというより状態?

モード変更コマンド

コマンド モード
esc ノーマルモードに戻る
Ctrl-[ ノーマルモードに戻る
i カーソル位置からインサートモードに入る
a カーソルの直後からインサートモードに入る
I 行頭からインサートモードに入る
A 行末からインサートモードに入る
Ctrl-o(インサートモード中) インサートノーマルモードに入る(インサートモード中に1コマンドのみノーマルモードのコマンドを使用できる)
v ビジュアルモードに入る
V 行単位の選択をするビジュアルモードに入る
Ctrl-v 矩形選択をするビジュアルモードに入る
gv 前回選択した範囲が再選択された状態でビジュアルモードに入る
: コマンドラインモードに入る(続けてコマンドを打ち, Enterで実行)
r ノーマルモードからカーソル位置の1文字を変更

Vim でよく使うコマンド

よく使う便利機能

コマンド 機能
u Undo
ctrl+r Redo
= カーソルがある行をインデント. ビジュアルモードで範囲を選択していれば, その範囲をインデント
>> インデントを追加
<< インデントを削除
Ctrl-a カーソル行上で, カーソル以降の最初に出現した数字をインクリメント
Ctrl-x カーソル行上で, カーソル以降の最初に出現した数字をデクリメント
q: 実行したコマンドのヒストリの表示
q/, q? 実行した検索のヒストリ表示

Note

ctrl-a に似たもので true/false 切り替えコマンドのプラグインが複数公開されています。 switch.vim

~/.vimrc
NeoBundle 'AndrewRadev/switch.vim'
~/.vimrc
" switch.vim
" http://www.vimninjas.com/2012/09/12/switch/
let g:variable_style_switch_definitions = [
\   {
\     'f': {
\       'foo': 'bar'
\     },
\
\     'b': {
\       'bar': 'foo'
\     },
\   }
\ ]
nnoremap + :call switch#Switch(g:variable_style_switch_definitions)<cr>
nnoremap - :Switch<cr>

切り替え文字列は固定でなく、上記のような設定テーブルを任意に設置する方式。例は foo<=>bar 切り替え。

1. ロード・セーブ&終了

キー 動作
:w 上書き保存
:w! 読み取り専用でも強制保存
:w name ファイルネーム’name’で保存
:q 終了
:q! ファイルをセーブしてなくても強制終了
:wq 保存&終了
:wq! 読み取り専用でも強制保存&終了
x: ファイル保存してから終了
:x! 読み取り専用でも強制保存&終了

ノーマルモードで保存

キー 動作
ZZ ファイルを保存してから終了します。:wq と同じ動作です。
ZQ ファイルを保存しないで終了します。:q! と同じ動作です。
キー 動作
:e ファイルを開く
:e. エクスプローラーを開く
e!: ファイルのリロード
キー 動作
:Unite tab タブ一覧
:Unite buffer_tab 現在のタブで開いたバッファ一覧
:Unite buffer バッファ一覧

2. 検索

キー 動作
/[検索文字列] 下方向に、[検索文字列]の検索を行う。
?[検索文字列] 上方向に、[検索文字列]の検索を行う。
n /や?で検索を行った後に、順方向に次の検索結果にジャンプする。
N /や?で検索を行った後に、逆方向に次の検索結果にジャンプする。
* カーソル位置の単語を下方向に検索する。/[カーソル位置の単語]と同じ動作。
# カーソル位置の単語を上方向に検索する。?[カーソル位置の単語]と同じ動作。
g* カーソル下の単語を含む文字列を, 後方検索する。
g# カーソル下の単語を含む文字列を, 前方検索する
コマンド 内容
カーソルがある単語の前方検索
カーソルがある単語の後方検索
g# カーソルの下にある単語が含まれる文字列を前方検索
g* カーソルの下にある単語が含まれる文字列を後方検索

3. ジャンプ

コマンド 内容
1G or gg 1行目に移動
G 最終行へ移動
[数字]G:[数字] [数字]行目へ移動
コマンド 内容
:marks mark一覧を表示する
m[a-zA-Z] カーソル位置をmarkする
`` 直前のマークへ移動
C-o 古いマークへ移動
C-i 新しいマークへ移動
`[a-zA-Z] 指定のマークに移動
‘[a-zA-Z] 指定のマークの行頭に移動
:delmarks [a-zA-Z] マークの削除
:delmarks! マークの一括削除

4. コピー&ペーストe

コマンド 内容
yy 行コピー
dd 行カット
p 行コピー >カーソル直前
P 行コピー >カーソル直後
x カーソル上の1文字切り取り
dl カーソル上の1文字切り取り(xと同じ)
cc カーソルがある行を消して, インサートモードに入る
cw カーソル位置から1単語分削除して, インサートモードに入る
ciw カーソル位置にある単語を1つ削除して, インサートモードに入る
Ctrl-r 0(ゼロ)(インサートモード中に) レジスタ0に保存されている文字列を貼り付ける. 通常, yを使用してコピーした文字列は, レジスタ0に保存される.
コマンド 内容
yw 1単語コピー
dw カーソル位置から1単語分削除する
diw カーソル位置にある単語を1つ削除する
dt( カーソル位置から, 次に最初に出現する(までを削除する
ct( カーソル位置から, 次に最初に出現する(までを削除して, インサートモードに入る

ペーストは行と同じ

ノーマルモードかヴィジュアルモードで ctrl+v で矩形ビジュアルモードになります。

ctrl+v

矩形選択をしたら下記のコマンドでコピー&ペーストなどを行います。 ※中止はESCです。

コマンド 内容
ctrl+v 矩形モードへ
y 選択中の矩形をコピー
d 選択中の矩形を削除
p 選択コピー(削除)した矩形をペースト

選択BOXの全部の行に一度に文字列の挿入するには

  1. 矩形でテキスト選択をする
  2. Iキー で挿入モードへ
  3. 挿入したい文字を入力
  4. ESC で終了

複数の行の頭に # などを入れてコメントアウトする時などに便利です。

上述の I のかわりに A で操作すると右端に挿入できます

選択BOXの全部の行に一度に文字列の挿入するには

  1. 矩形でテキスト選択をする
  2. Aキー で挿入モードへ
  3. 挿入したい文字を入力
  4. ESC で終了

矩形選択中に $ で行末まで選択されます。


矩形選択中に r でリプレースモードとなり置換できます。


矩形選択中に < > でタブシフトできます。

また、. (ピリオド)で連続シフトが可能です。

Note

vimにはタブの挿入が出来る便利なコマンドがあります。


コマンド 内容
> 行頭にTABを1つ挿入
< TABを1つへらす


5. 置換

置換は :s または :%s コマンドを使用します。
:s で行の置換、:%s でファイル全体の置換を行います。
また、矩形選択中では :s コマンドで選択範囲内のみの置換が可能です。
コマンド書式は :s/old/new/g もしくは :s;old;new;g/; で置換文字列を区切ります。
これはpath など/を含む文字列を扱うための配慮ですので適宜使い分けてください。

(カーソル行、もしくは矩形選択範囲

コマンド 機能
:s/old/new/g 開いているファイル全てのテキスト置換
:s/old/new/gc 最後が /gc のときは置換するか確認しながら行えます。
:10,20s/old/new/g 10~20行に対して置換を行います。

(ファイル全体)

コマンド 機能
:%s/old/new/g 開いているファイル全てのテキスト置換
old =置換前の文字列
new=置換後の文字列

便利な置換方法として検索している文字列の置換があります。方法は、

* コマンドで検索したあと、%s//new/g で検索中の文字列を一括置換できます。

※ :s コマンドだとカーソル行のみ置換されますのでご注意!


6. カーソル移動

コマンド 機能
w 前方に一単語分、カーソルを移動します
b 後方に一単語分、カーソルを移動します
e 単語の最後の文字に移動します。
E 単語の再度の文字に移動します。 .などの文字も単語とみなすっぽい
ctrl+y 上へスクロール
ctrl+n 下へスクロール
ctrl+u ページアップ
ctrl+d ページダウン
_images/cur.jpg


7. 画面分割

コマンド 機能
:split (sv) 水平に画面分割
:vsplit (vs) 縦に画面分割
<C-w>h 左に移動
<C-w>j 下に移動
<C-w>k 上に移動
<C-w>l 右に移動
<C-w>w 次に移動

分割Windowの操作

コマンド 機能
<C-w>H 左に移動
<C-w>J 下に移動
<C-w>K 上に移動
<C-w>L 右に移動
<C-w>r 回転
<C-w>_ 縦に最大化
<C-w>| 横に最大化

8. 背景色などのカスタマイズ

色の変更はスキームの読込みとカラー設定コマンドで 背景や文字色をいっぺんに変更できます。

方法は、 例えば hybrid スキーム(※)を使う場合、.gvimrcに

colorscheme hybrid
set background=dark

を追加します。 色を細かく設定するより好みのスキームを探して設定すると簡単にかっこいい色に変更できます。

※プラグインファイルをDLして所定の場所に設置する必要があります。(後半に関連の解説があります。)

オススメのスキーム

_images/vim_hybrid.png

https://github.com/w0ng/vim-hybrid


9. grep

複数のファイルから文字列検索をするgrep機能は複数の方法が提供されています。

  • :vimgrep コマンドを使う方法
  • 外部のgrepを使う方法

vimgrep コマンドの書式は

:vimgrep keyword filename

:vimgrep の代わりに :vim と省略形で呼び出すことも可能です。

また、カレントのバッファ内部のみ検索する場合は % を指定します。

:vimgrep /keyword/%

検索すると n/max のように検索できた件数が画面が部に表示されます。

検索中のコマンドは以下のとおりです。

コマンド 機能
:cn[ext] [ext個]次の検索結果へ移動
:cN[ext] [ext個]前の検索結果へ移動

grep結果をたどるのではなく一覧で見たい、という時は

:vimgrep keyword file | cw

とすると Quickfix-windowで一覧することができます。 また、.vimrc に以下の設定をすることで自動でwindowを開くようになります。

autocmd QuickFixCmdPost *grep* cwindow

quickfixの操作コマンドの概要

コマンド 機能
:copen windowを開く
:cclose windowを閉じる
:cnext [cn] リストの次の要素へ移動
:cprev [cp] リストの前の要素へ移動
:cnfile 次のファイルの最初の要素へ
:cpfile 前のファイルの最後の要素へ
:cfirst 最初の要素へ
:clast 最後の要素へ

ちなみに、windowの操作は

コマンド 機能
CTRL+W w カーソルを次のwindowへ
CTRL+W h カーソルを左のwindowへ
CTRL+W j カーソルを下のwindowへ
CTRL+W k カーソルを上のwindowへ
CTRL+W l カーソルを右のwindowへ
:q[!], ZZ ウィンドーを閉じる
:wqa すべてのウインドーを閉じてvim終了
(参照)quickfix のマニュアル
http://vim-jp.org/vimdoc-ja/quickfix.html#quickfix











end

_images/vim.jpg

10. タブページ

gvim はタブエディター(複数のファイルをタブ切り替えできる)機能があり、下記のコマンドで利用することができます。

コマンド 機能
:tabnew [file] 新しいタブを開く. ファイル名を入力した場合は, そのファイルを開く
:tabclose タブを閉じる(:qなどでも閉じられます)
:tabnext 次のタブに移動する
:tabprevious 前のタブに移動する
:tabfirst 1番目のタブに移動する
:tablast 最後のタブに移動する
:tabonly 現在のタブ以外全てのタブを閉じる
gt 次のタブに移動する. gtの直前に数字をつけると, 数字番目のタブに移動する
gT 一つ前のタブに移動する

タブの切り替え gt は 数値を指定することで何番目のタブか指定することも可能です。

1gt = 一番左のタブ
3gt = 左から三番目のタブ

起動時に指定するには

vim -p aaa.txt bbb.txt タブで開く

起動後のコマンドは

コマンド 機能
:tabnew tab でファイルを開く
:tabnext 次のタブへ移動
:tablast 最後のタブへ移動
gt sn 次のタブに切替
gT sp 前のタブに切替

11. プラグイン

所定のpathへプラグインファイル .vim を設置すると自動で読み込まれ機能が使用できるようになります。

設置場所のpathは下記のコマンドで確認が出来ます。

:help runtimepath

でパスを確認します。 Windowsの場合、環境変数 HOME の設定を確認し,なければ設定します。 ※設定したpathのフォルダも適宜作成。

一般的にWindowsであれば

%HOME%/vimfiles/plugin

が設置pathとなります。

また、pathはで新規追加することも可能です。

:set runtimepath+={検索ディレクトリ}

詳しくは、下記参照。 http://nanasi.jp/articles/howto/user-manual/user-manual-user-dir.html

プラグインが読み込まれたかの確認は

:scriptnames

実際のPluginのインストールや管理にはNeoBundleを使うのがお勧めです。 使い方は、

1) NeoBundleのインストール
2) .vimrc へNeoBundle設定を追加
3) 入れたいpluginの設定を.vimrc へ追記

で行います。

NeoBundleインストール

$ mkdir -p ~/.vim/bundle
$ git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

.vimrc 編集

"---------------------------------------------------------------------------
" Start NeoBundle Setting
""---------------------------------------------------------------------------


" bundleで管理するディレクトリを指定
set runtimepath+=~/.vim/bundle/neobundle.vim/


" Required:
call neobundle#begin(expand('~/.vim/bundle/'))

" neobundle自体をneobundleで管理
NeoBundleFetch 'Shougo/neobundle.vim'

NeoBundle 'HybridText'

call neobundle#end()


" Required:
filetype plugin indent on

" 未インストールのプラグインがある場合、インストールするかどうかを尋ねてくれるようにする設定
" 毎回聞かれると邪魔な場合もあるので、この設定は任意です。
NeoBundleCheck

"-------------------------
" End Neobundle Settings.
"-------------------------
上記の NoeBundle ‘HybridText’ の行がプラグインを追加している記述です。
この場所に同じように追記していきます。

12. 小技で使いやすく

" カーソル行を強調表示しない
set nocursorline
" 挿入モードの時のみ、カーソル行をハイライトする
autocmd InsertEnter,InsertLeave * set cursorline!
highlight CursorLine gui=underline guifg=NONE guibg=NONE
highlight CursorLine gui=underline guifg=NONE guibg=GRAY40
:! command

で外部コマンドを実行できます。 make をするときなど便利です。

スクリプトファイルの編集でdoc用ファイルになってしまって問題がおきるなど、doc,mac,unixの文字コード変更をするには

:set fileformat=dos | mac | unix

CRをファイルから除去するには

:%s/^M//g

^M は ctrl+V => ctrl+M で入力できます。

:set fileencoding=文字コード
:set fenc=文字コード (上のコマンドの短い形式。こちらでも良い。)
:set fileencoding=euc-jp (エンコーディングEUC-JPに変更。)
:set fileencoding=shift_jis (エンコーディングSHIFT_JISに変更。)
:set fileencoding=utf-8 (エンコーディングUTF-8に変更。)
:set fileformat=ファイルフォーマットの種類
:set ff=ファイルフォーマットの種類 (上のコマンドの短い形式。こちらでも良い。)
:set fileformat=dos (改行をWindowsの形式に変更。)
:set fileformat=mac (改行をMacの形式に変更。)
:set fileformat=unix (改行をUnixの形式に変更。)

新規作成で utf-8 に固定したいときは vimrc に以下を追加。

set encoding=utf-8

ESCでノーマルモードへ戻るときに自動で日本誤変換を解除

“##### auto fcitx ########### function! Fcitx2en()

let s:input_status = system(“fcitx-remote”) if s:input_status == 2

let l:a = system(“fcitx-remote -c”)

endif

endfunction

set ttimeoutlen=150 “退出插入模式 autocmd InsertLeave * call Fcitx2en() “##### auto fcitx end ######

13. カスタマイズ

set whichwrap=b,s,<,>,[,]
set encoding=utf-8
set fileencodings=iso-2022-jp,cp932,sjis,euc-jp,utf-8

デフォルトのフォント設定が気に入らない場合

:set guifont=*

でフォントを試して .gvimrc を編集して

set guifont=Monospace\ 11

のように設定してみましょう。


.vimrc に初期設定を加える

set encoding=utf-8
set fileencodings=iso-2022-jp,cp932,sjis,euc-jp,utf-8

デフォルトのフォント設定が気に入らない場合

:set guifont=*

でフォントを試して .gvimrc を編集して

set guifont=Monospace\ 11

のように設定してみましょう。









end


チートシートで十分な方はコチラ~

http://vim.rtorr.com/lang/ja/


Indices and tables