読者です 読者をやめる 読者になる 読者になる

Vimについて

基本操作

h, j, k, l   [左下上右]へ移動
gj  表示行単位で移動(↓)
gk  表示行単位で移動(↑)
^   行頭へ移動
$   行末へ移動
%   対応する括弧へ移動

UNDO(元に戻す)・REDO(元に戻したものを戻す)

u            undo(アンドゥ)一動作分、前の状態に戻す。  
Ctrl + r    redo(リドゥ)。アンドゥで戻した操作を、元に戻す。

移動

ファイルの端っこへ移動
gg  ファイル先頭  
G   ファイル末尾
0   行頭
$   行末

半分移動
Ctrl-u  半画面戻る
Ctrl-d  半画面進む

画面の端っこへ移動
H   画面最上に戻る
L   画面最下に進む


n行移動
[n]k    n 行戻る
[n]h    n 文字戻る
[n]l    n 文字進む  
[n]j    n 行進む

削除

単語を削除して、入力モードに

x        カーソル上の1文字削除
X       カーソルの左の文字を1文字削除
dw      カーソル位置から空白を含む単語の末尾まで削除
de      カーソル位置から空白を含まない単語の末尾まで削除
d$      カーソル位置から行末まで削除
dd      1行削除切り取り(カット) 

cw      単語単位で、文字を削除し、「i」を押さずとも、入力モードに切り替えることができます。  

コピー

複数行コピー

1.  ms   <開始行で>
2.  me   <終了行で>
3.  :'s,'ey   <コピー>
4.  p   <貼り付け>

置換

  • 文字単位
    r

  • 全体単位

:%s/{置換前文字}/{置換後文字}/[オプション]

:%s/hoge/hogehoge/cgl

g 行の中でマッチしたすべての文字を置換する
c マッチするたびに置換するかどうか聞く
i 大文字小文字のを無視する
I 大文字小文字を判別する
n 該当する箇所が何箇所あったか教えてくれる、教えてくれるだけで置換は行わない

編集

o 次の行を空けてインサートモード
O 前の行を空けてインサートモード
r 一文字だけ置き換えたいとき
w 次の単語の頭に移動(Wでもうちょっと距離)
b 前の単語の頭に移動(Bでもうちょっと距離)
e 次の単語の末尾に移動
ea  現在の単語の直後に入力

ハイライト

* 単語の上で*を押すと同じ単語をハイライトしてくれます(移動はn 消す場合は、:noh)

インテント修正

=    その行のインデント位置を自動修正

一般ユーザで開いたファイルを管理者権限で保存する方法

:w !sudo tee %

ファイルを閉じたあとでも、過去の編集履歴をUndoコマンドで遡れるようにする。

mkdir -p ~/.vim/undo

.vimrcに下記を追加

if has('persistent_undo')
  set undodir=~/.vim/undo
  set undofile                                                                                                                                   
endif

vimrc

set nocompatible "vi非互換モード

"#######################
" 表示系
"#######################
"set number "行番号表示
set showmode "モード表示
set title "編集中のファイル名を表示
set ruler "ルーラーの表示
set showcmd "入力中のコマンドをステータスに表示する
set showmatch "括弧入力時の対応する括弧を表示
set laststatus=2 "ステータスラインを常に表示
set cursorline "横線
"set cursorcolumn "縦線
"highlight CursorColumn ctermfg=Green

"#######################
" プログラミングヘルプ系
"#######################
syntax on "カラー表示
set smartindent "オートインデント
" tab関連
set expandtab "タブの代わりに空白文字挿入
set ts=4 sw=4 sts=0 "タブは半角4文字分のスペース
" ファイルを開いた際に、前回終了時の行で起動
autocmd BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal g`\"" | endif

"#######################
" 検索系
"#######################
set ignorecase "検索文字列が小文字の場合は大文字小文字を区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan "検索時に最後まで行ったら最初に戻る
set noincsearch "検索文字列入力時に順次対象文字列にヒットさせない
set nohlsearch "検索結果文字列の非ハイライト表示

"######################
"全角空白
"######################
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray
match ZenkakuSpace / /

vimrc 再読み込み

:source $MYVIMRC
or
:source ~/.vimrc