vi,vimコマンド備忘録

# vi,vimコマンド備忘録

大体覚えてはいるが、度忘れしたときの自分用の備忘録として残します。



## ■カーソル移動■

| key      | key2     | Action              |
| -------- | -------- | ------------------- |
| h        | BS       | １文字左へ移動（←） |
| j        | Ctrl + N | １行下へ移動（↓）   |
| k        | Ctrl + P | １行上へ移動（↑）   |
| l        | SPACE    | １文字右に移動（→） |
| 0        | -        | 行の頭へ移動        |
| $        | -        | 行の最後へ移動      |
| Ctrl + F | -        | １ページ下へ        |
| Ctrl + B | -        | １ページ上へ        |
| Ctrl + D | -        | 半ページ下へ        |
| Ctrl + U | -        | 半ページ上へ        |



## ■入力・編集■
（コマンドモードでここのコマンドを入力すると入力モードになります）

| key  | Action                                         |
| ---- | ---------------------------------------------- |
| a    | カーソルの右から入力開始                       |
| A    | 行末から入力開始                               |
| i    | カーソルの左から入力開始                       |
| I    | 行頭から入力開始                               |
| o    | 現在の行の下に１行挿入し、その行頭から入力開始 |
| O    | 現在の行の上に１行挿入し、その行頭から入力開始 |



## ■削除■

| key       | Action                                   |
| --------- | ---------------------------------------- |
| x         | カーソル上の１文字削除                   |
| X         | カーソルの左の文字を１文字削除           |
| dd        | 現在の行を削除（バッファにコピーされる） |
| ndd       | n行、削除                                |
| dw        | カーソル上の一語を削除                   |
| d$        | カーソル位置から行の最後までを削除       |
| :行1, 行2 | d 行1 から行2 を削除                     |



## ■検索■

| key       | Action                     |
| --------- | -------------------------- |
| /<文字列> | 文字列 を検索する          |
| ?<文字列> | 文字列を検索する（逆方向） |
| n         | 順方向へ検索する           |
| N         | 逆方向へ検索する           |



## ■置換■

| key                     | Action                                                       |
| ----------------------- | ------------------------------------------------------------ |
| r                       | カーソル上の１文字を他の１文字に置換                         |
| R                       | カーソル上の文字からEscが押されるまでの文字列を置換          |
| s                       | カーソルのある１文字を他の文字列で置換                       |
| S                       | 現在の行を他の文字列で置換                                   |
| cw                      | カーソル位置からこの語の最後までを置換                       |
| cf 字                   | カーソル位置から指定した字 までを置換                        |
| C                       | カーソル位置から行の最後までを置換                           |
| :&,                     | & 直前のsコマンドの繰り返し                                  |
| :%s/置換え前/置換え後   | 置換え前の文字列を、置換え後の文字列で置換<br>もっとも近くにある文字列一つに対してのみ実行 |
| :%s/置換え前/置換え後/g | ファイルの中すべての文字列に対して、置換えを行う             |
| ~（チルダ）             | 大文字/小文字を変更する                                      |



## ■カット＆ペースト■

| key  | Action                                                       |
| ---- | ------------------------------------------------------------ |
| yy   | 現在の行をバッファにコピー                                   |
| nyy  | n行分をバッファにコピー                                      |
| yw   | 単語をバッファにコピー                                       |
| p    | バッファ内のテキストを挿入<br>（文字、単語はカーソルの右に、行は現在の行の下に挿入される） |
| P    | バッファ内のテキストを挿入<br>（挿入位置はpの逆。文字、単語はカーソルの左に、行は現在の行の上に挿入される） |



## ■Undo・Redo■

| key  | Action                   |
| ---- | ------------------------ |
| u    | 直前の操作を取りやめる   |
| U    | 行全体の操作を取りやめる |
| .    | 直前の操作の繰り返し     |



## ■ファイル操作■

| key                    | Action                                                       |
| ---------------------- | ------------------------------------------------------------ |
| :w　[ファイル名]       | 現在のファイル（指定ファイル)に保存                          |
| :w! [ファイル名]       | 書き込みを強行                                               |
| :行1, 行2 [ファイル名] | ファイル名 行1 から行2 のテキストをファイルに保存            |
| :w　>>　[ファイル名]   | 現行ファイルの最後に書き加える                               |
| :r [ファイル名]        | 現在の行の次の行にファイルを読み込み、挿入する               |
| :r                     | 現在の行の次の行に現在のファイルを読み込み、挿入する         |
| :args                  | 編集ファイルの一覧を表示する                                 |
| :n                     | 複数個のファイル編集時、次のファイルを編集対象とする         |
| :e#                    | 一つ前の編集ファイルに戻る                                   |
| :e!%                   | 現在のファイルを再ロードして、最初から編集をやり直す         |
| :e [ファイル名]        | 指定ファイルを編集対象とする                                 |
| :e ++enc=<文字コード>  | 現在のファイルを指定した文字コードで再ロードする             |
| :rewind                | 現在のファイルの変更内容を保存して、リストの最初から編集をやり直す |
| :rewind!               | 現在のファイルの変更内容を保存しないで、リストの最初から編集をやり直す |




## ■終了■

| key  | Action                                             |
| ---- | -------------------------------------------------- |
| ZZ   | viを終了（内容が変更されている場合は保存）         |
| :wq  | ファイルに保存してvi終了                           |
| :q   | viを終了（内容が変更されている場合は警告）         |
| :q!  | viの強制終了（内容が変更されていても保存されない） |




## ■UNIXコマンドの実行■

| key          | Action                                 |
| ------------ | -------------------------------------- |
| :!<コマンド> | <コマンド>を実行する                   |
| :!!          | 直前の<コマンド>を再実行する           |
| :sh          | 一時的にシェルに戻る。exitでviに戻る。 |



## ■コマンドのフィルタリング■

| key          | Action                           |
| ------------ | -------------------------------- |
| !<コマンド>  | <コマンド>を実行して結果を挿入   |
| !!date       | dateコマンドの結果の挿入         |
| !!tr A-Z a-z | カーソル行の大文字を小文字に変換 |



## ■テキスト入力の略記■

| key                         | Action                                                       |
| --------------------------- | ------------------------------------------------------------ |
| :ab <文字列> <置換え文字列> | <文字列>と入力すると<置換え文字列>に置き換えるように設定する |
| :unab <文字列>              | <文字列>の置き換え設定を解除する                             |
| :ab                         | 一覧表示                                                     |



## ■その他■

| key       | Action                                                     |
| --------- | ---------------------------------------------------------- |
| Ctrl + G  | ファイル名、修正の有無、現在の行数などの情報が表示されます |
| Ctrl + L  | 画面を再表示                                               |
| Shift + Q | exで編集をする                                             |
| vi        | exからviに戻る                                             |




## ■コマンド■

| key                                | Action                                |
| ---------------------------------- | ------------------------------------- |
| :set number (もしくは:set nu)      | 行番号を表示する                      |
| :set no number (もしくは:set nonu) | 行番号の表示をやめる                  |
| :set showmode                      | 現在のモードを表示する                |
| :set showmatch                     | () や {} の対応の報告をするようになる |
| :set ignorecase                    | 大文字/小文字の区別なく検索する       |
| :set autoindent                    | 自動インデントモード                  |
| :set noautoindent                  | 自動インデントモードをやめる          |
| :set all                           | すべてのオプションを表示する          |
| :set enc?                          | viの文字コードを確認                  |
| :set fenc=<文字コード>             | ファイルの文字コード変更              |



## ■ショートカットキー集■

[vim日本語チートシート](https://qiita.com/zipper/items/8fbed306e203b17be0c3)
[今更ながらvimチートシート](https://qiita.com/hkuno/items/4557f3f8d6b27d2884f2)
[Vimチートシートを作りました（超初心者用）](https://qiita.com/hattys2/items/56d973ad4f197b751501)

## ■.vimrcの例　（vimの設定ファイル）■

```
"---------------------------------------------------- 
" 基本的な設定 
"---------------------------------------------------- 

" viとの互換性をとらない(vimの独自拡張機能を使う為) 
set nocompatible 

"改行コードの自動認識 
set fileformats=unix,dos,mac 

" ビープ音を鳴らさない 
set vb t_vb= 

" バックスペースキーで削除できるものを指定 
" indent : 行頭の空白 
" eol : 改行 
" start : 挿入モード開始位置より手前の文字
set backspace=indent,eol,start 

"---------------------------------------------------- 
" バックアップ関係 
"---------------------------------------------------- 
" バックアップをとらない 
set nobackup 

" ファイルの上書きの前にバックアップを作る 
" (ただし、backup がオンでない限り、バックアップは上書きに成功した後削除される) 
set writebackup 
" バックアップをとる場合 
set backup 

" バックアップファイルを作るディレクトリ 
"set backupdir=~/backup 

" スワップファイルを作るディレクトリ 
"set directory=~/swap 

"---------------------------------------------------- 
" 検索関係 
"---------------------------------------------------- 
" コマンド、検索パターンを100個まで履歴に残す 
set history=100 

" 検索の時に大文字小文字を区別しない 
set ignorecase 

" 検索の時に大文字が含まれている場合は区別して検索する 
set smartcase 

" 最後まで検索したら先頭に戻る 
set wrapscan 

" インクリメンタルサーチを使わない 
"set noincsearch 

" インクリメンタルサーチ 
set incsearch

"クリップボードをWindowsと連携
set clipboard=unnamed

"---------------------------------------------------- 
" 表示関係 
"---------------------------------------------------- 

"カラースキーマ(zenburn,blackdust,desert等をダウンロードし~/vimfiles/coloersに配置)
coloerscheme zenburn

" タイトルをウインドウ枠に表示する 
set title 

" 行番号を表示しない 
set nonumber 

" ルーラーを表示 
set ruler

" 現在の行を強調表示
set cursorline

" タブ文字を CTRL-I で表示し、行末に $ で表示する 
"set list 

" 入力中のコマンドをステータスに表示する 
set showcmd 

" ステータスラインを常に表示 
set laststatus=2 

" 括弧入力時の対応する括弧を表示 
set showmatch 

" 対応する括弧の表示時間を2にする 
set matchtime=2 

" シンタックスハイライトを有効にする syntax on 
" 検索結果文字列のハイライトにする

set hlsearch
" ESC連打でハイライト解除 nmap <Esc><Esc> :nohlsearch<CR><Esc>
" コメント文の色を変更 
highlight Comment ctermfg=DarkCyan 

" コマンドライン補完を拡張モードにする
set wildmenu 

" 入力されているテキストの最大幅 
" (行がそれより長くなると、この幅を超えないように空白の後で改行される)を無効にする 
set textwidth=0 

" ウィンドウの幅より長い行は折り返して、次の行に続けて表示する 
set wrap 

" 全角スペースの表示 
highlight ZenkakuSpace cterm=underline ctermfg=lightblue guibg=darkgray 
match ZenkakuSpace /　/ 

" ステータスラインに表示する情報の指定 set statusline=%n\:%y%F\ \|%{(&fenc!=''?&fenc:&enc).'\|'.&ff.'\|'}%m%r%= 
" ステータスラインの色 
highlight StatusLine term=NONE cterm=NONE ctermfg=black ctermbg=white 

"---------------------------------------------------- 
" インデント 
"---------------------------------------------------- 
" オートインデントを無効にする 
"set noautoindent 

" タブが対応する空白の数 
set tabstop=4 

" タブやバックスペースの使用等の編集操作をするときに、タブが対応する空白の数 
set softtabstop=4 

" インデントの各段階に使われる空白の数 
set shiftwidth=4 

" タブを挿入するとき、代わりに空白を使わない 
set noexpandtab 

"---------------------------------------------------- 
" 国際化関係 
"---------------------------------------------------- 

" 文字コードの設定 
" fileencodingsの設定ではencodingの値を一番最後に記述する 
set encoding=utf-8 
set termencoding=utf-8 
set fileencoding=utf-8 
set fileencodings=ucs-bom,euc-jp,cp932,iso-2022-jp 
set fileencodings+=,ucs-2le,ucs-2,utf-8 

"---------------------------------------------------- 
" オートコマンド 
"---------------------------------------------------- 

if has("autocmd") 
    " ファイルタイプ別インデント、プラグインを有効にする 
    filetype plugin indent on 
     " カーソル位置を記憶する 
    autocmd BufReadPost * \ 
        if line("'\"") > 0 && line("'\"") <= line("$") | 
        \ exe "normal g`\"" | \ 
        endif 
endif 

"---------------------------------------------------- 
" その他 
"---------------------------------------------------- 
" バッファを切替えてもundoの効力を失わない 
set hidden 

" 起動時のメッセージを表示しない 
set shortmess+=I

"マウス設定
set mouse=a 
set ttymouse=xterm2

"viをマスターするために
" 矢印キーを無効にする
noremap <Up> <Nop> 
noremap <Down> <Nop> 
noremap <Left> <Nop> 
noremap <Right> <Nop> 
inoremap <Up> <Nop> 
inoremap <Down> <Nop> 
inoremap <Left> <Nop> 
inoremap <Right> <Nop>

"---------------------------------------------------- 
" 独自設定 
"---------------------------------------------------- 

" スクロール時の余白確保 
set scrolloff=5 

" 他で書き換えられたら自動で読み直す 
set autoread 

" 行番号表示 
set number 

" インデント 
set autoindent

"複数行のクリップボードからの貼付けがおかしくなる。
":set paste
"を入力してから貼り付けをすれば、問題なく貼り付けができる。
set smartindent
set cindent 
set noexpandtab

" タブをスペースに展開しない 
" コマンド補完を開始するキー 
set wildchar=<tab> 
set whichwrap=b,s,h,l,<,>,[,] 

" カーソルを行頭、行末で止まらないようにする 
" キーバインド関係 
" 折り返し時に表示行単位での移動できるようにする
nnoremap j gj 
nnoremap k gk 

" カレントウィンドウにのみ罫線を引く augroup cch 
    autocmd! cch 
    autocmd WinLeave * set nocursorline         
    autocmd WinEnter,BufRead * set cursorline 
augroup END

```



●FencView.vimっていうプラグインを入れると
自動で文字コード判断してくれて便利です。
http://www.vim.org/scripts/script.php?script_id=1708