僕はかれこれ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文字反転させる) |
取り消し、繰り返し
u |
アンドゥー |
ctrl+r |
リドゥー |
. |
繰り返し |
その他の編集
: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 |
ヴィジュアルモードへ切り替え |
.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を完全網羅したら本とかないのかな??