僕はかれこれ5年くらいvimを使ってるんだけど、それにしてはvimを知らなさすぎると思って、勉強しなおしてみました。
参考書籍は「オライリー 入門vi」なのでvimじゃなくてviの基礎から勉強。
で、今まで使っていたコマンドと、新たに覚えた使えそうなコマンドをメモしておくことに。
ついでにRubyで補完をする方法、AutoComplPopの導入、作り直した.vimrcをさらしてみます。
コマンドモードから入力モードへ切り替える
| i | カーソル位置から文字を書き始める |
| a | カーソル位置の後から文字を書き始める |
| o | カーソル位置の下の行から文字を書き始める |
| O | カーソル位置の上の行から文字を書き始める |
入力モードからコマンドモードへ切り替える
| Esc | どちらのモードかわからなくなったらとにかくEsc |
保存
| :w | 保存 |
| :q | 終了 |
| :wq | 保存して、終了 |
| :q! | 保存せずに終了 |
移動
1文字移動
| h | 左へ移動(10h 10文字左へ移動) |
| j | 下へ移動 |
| k | 上へ移動 |
| l | 右へ移動 |
行内移動
| 0 | 行頭へ移動 |
| ^ | 行頭の空白文字の後へ移動 |
| $ | 行末へ移動 |
画面内移動
| H | 画面内の最初の行へ移動 |
| M | 画面内の中央の行へ移動 |
| L | 画面内の最後の行へ移動 |
スクロール移動
| Ctrl + f | 下へ1ページスクロール |
| Ctrl + b | 上へ1ページスクロール |
| z Enter | カーソル行が画面の最初の行となるようにスクロール |
検索移動
| /abc | カーソル位置以下の文字abcへ移動 |
| ?abc | カーソル位置以上の文字abcへ移動 |
| n | 前回の移動と同方向へ検索して移動 |
| N | 前回の移動と逆方向へ検索して移動 |
その他の移動
| % | 括弧にカーソルを合わせて%を押すと、対応する括弧に移動する |
| ma | カーソル位置にマークaをつける |
| `a | マークaに移動 |
| :n10 | 10行目に移動 |
| gg | ファイルの最初の行へ移動 |
| G | ファイルの最後の行へ移動 |
編集
コピー
| yy | カーソル行をコピー(10yy 10行コピー) |
| y0 | カーソル位置から行頭までをコピー |
| y^ | カーソル位置から行頭(行頭の空白無視)までをコピー |
| y$ | カーソル位置から行末までをコピー |
ペースト
| p | カーソル位置の後にペースト |
| P | カーソル位置の前にペースト |
削除
| dd | カーソル行をコピーして削除(10dd 10行削除) |
| d0 | カーソル位置から行頭までコピーして削除 |
| d^ | カーソル位置から行頭(行頭の空白無視)までをコピーして削除 |
| d$ | カーソル位置から行末までコピーして削除 |
名前付きコピー、削除、ペースト
| "ayy | バッファaにコピー |
| "add | バッファaにコピーして行を削除 |
| "ap | バッファaを貼付け |
| "Ayy | バッファaに追加でコピー |
| "Add | バッファaに追加でコピーして行を削除 |
文字編集
| x | カーソル位置の1文字をコピーして削除(10x 10文字削除) |
| ra | カーソル位置の1文字をaに置き換える |
| Rabc | カーソル位置から3文字をabcに置き換える |
| ~ | カーソル位置の1文字を大文字小文字を反転させる(10~ 10文字反転させる) |
取り消し、繰り返し
その他の編集
| :r file | fileを読み込んでカーソル行に追加 |
| J | カーソル位置の行末に下の行を連結する (10J 10行連結) |
| >> | カーソル行をインデント (10>> 10行インデント) |
| << | カーソル行をアンインデント (10<< 10行アンインデント) |
置換
置換
| :s/abc/def/ | カーソル行の最初のabcをdefに置換 |
| :s/abc/def/g | カーソル行の全てのabcをdefに置換 |
| :s/abc/def/c | 確認しながら置換 |
行指数定
| :%s/abc/def/ | 全ての行 |
| :10,$s/abc/def/ | 10行目〜最後の行 |
| :0,10s/abc/def/ | 最初の行〜10行目 |
| :.,+10s/abc/def/ | カーソル行〜下10行 |
| :,-10s/abc/def/ | カーソル行〜上10行 |
行指定
| :g/xyz/s/abc/def/ | xyzが含まれる行 |
| :10,$g/xyz/s/abc/def | 10行〜最後の行でxyzが含まれる行 |
| :g/xyz/,+10s/abc/def/ | xyzが含まれる行〜下10行 |
削除
| :10,20d | 10行目〜20行目を削除 |
| :g/abc/d | abcが含まれる行を削除 |
| :g/abc/,+10d | abcが含まれる行〜下10行を削除 |
複数ファイルの編集
| :vi file | fileをviで開く |
| :ls | viで開いているファイル一覧を表示 |
| :b1 | 1番のファイルへ移動 |
| :bn | 次のファイルへ移動 |
| :bp | 前のファイルへ移動 |
| ctrl + ^ | 前に開いていたファイルへ移動 |
画面分割
| :sp | 水平方向へ画面を分割 |
| :vs | 垂直方向へ画面を分割 |
| :10sp | 水平方向へ10行の画面を分割 |
| :10vs | 垂直方向へ10桁の画面を分割 |
| ctrl+w h | 左の画面へ移動 |
| ctrl+w j | 下の画面へ移動 |
| ctrl+w k | 上の画面へ移動 |
| ctrl+w l | 右の画面へ移動 |
折りたたみ
| :set foldmethod=marker | {{{ }}}で囲まれた行を折りたたみ指定 |
| zm | 全て折りたたみ |
| zr | 全ての折りたたみを開く |
| zc | カーソル行を折り畳み |
| zo | カーソル行の折りたたみを開く |
shell
| :!ls | lsを実行 |
| :r !date | dateを実行して、結果をカーソル行に追加 |
| %!sort | 全行をソートしてその結果で置き換える |
その他
| :set number | 行数表示 |
| :nohl | 検索結果のハイライト表示を終了 |
| v | ヴィジュアルモードへ切り替え |
AutoComplPop
キーワード補完候補を自動的に表示してくれるプラグイン
言語によってはオムニ補完も表示してくれる
AutoComplPop - Automatically opens popup menu for completions : vim online
ns9tks / vim-autocomplpop / source — Bitbucket
Rubyの補完
デフォルトのvimではRubyがサポートがされていない(vim --version | grep rubyで確認できる)
なので、vim-railsをインストールする
sudo apt-get install vim-rails
.vimrc
set nocompatible
syntax on
colorscheme ron
hi Pmenu ctermfg=0 ctermbg=7
hi PmenuSel ctermbg=1
set hlsearch
hi Search ctermfg=0 ctermbg=1
cmap hs sp
noremap <C-h> <C-w>h
noremap <C-j> <C-w>j
noremap <C-k> <C-w>k
noremap <C-l> <C-w>l
set backup
set backupdir=~/.vimbackup
set encoding=utf8
set fileencodings=utf8
set tabstop=2 shiftwidth=2 softtabstop=0
set expandtab
set noautoindent
set nosmartindent
set foldmethod=marker
filetype on
filetype plugin on
filetype indent off
autocmd FileType * setlocal formatoptions-=ro
autocmd BufRead,BufNewFile *.rb cmap li !ruby -c %
autocmd BufRead,BufNewFile *.php cmap li !php -l %
autocmd BufRead,BufNewFile *.pl cmap li !perl -l %
autocmd BufRead,BufNewFile *.sh cmap li !bash -n %
let g:acp_enableAtStartup = 0
inoremap <C-o> <Esc>:AcpEnable<CR>a
inoremap <C-u> <Esc>:AcpDisable<CR>a
noremap <C-o> <Esc>:AcpEnable<CR>
noremap <C-u> <Esc>:AcpDisable<CR>
inoremap <expr> <CR> pumvisible() ? "\<C-Y>" : "\<CR>"
inoremap <expr> <C-j> pumvisible() ? "\<C-n>" : "\<C-j>"
inoremap <expr> <C-k> pumvisible() ? "\<C-p>" : "\<C-k>"
.vimrcはまだまだ未完成。というかvimの機能が多すぎてわからないことだらけ。vimを完全網羅したら本とかないのかな??