Vimコマンドとプラグイン

## 概要
vimコマンドを一通り記載します

## 準備
１）vimインストール
２）ユーザ環境変数のpathに追加して再起動
以下のパスデフォルトであることが多い
C:\Program Files\Vim
３）ホームディレクトリのVimfiles内にvimrcファイルを作成する
C:\Users\ユーザ名\vimfiles

## vimコマンド
```vim.txt
◆便利
コマンド補完
ctrl+pまたはctrl+n
半画面分 上へ
ctrl+u
半画面分 下へ
ctrl+d
行末に移動しインサートモード
A
行頭に移動しインサートモード
I
広範囲の単語の削除（スペースとスペースの間）
diW
選択範囲の削除
dawやda"やcawやca"
コマンドモードでの履歴表示
q:

◆繰り返し
直前のコマンドを再実行
.(ドット)
n行分削除
ndd
順方向に繰り返し検索
;

◆選択系とコピー、ペースト系
カーソル行の末尾に改行
o
カーソル行の先頭に改行
O
コピーしたい場合
y
カットしたい場合
d
カーソル位置の行をヤンク
yy
カーソル位置の行からn行目までをヤンク
ynG
カーソル位置の行から最初の行をヤンク
ygg
カーソル位置の行から最後の行をヤンク
yG
カーソル位置から指定の文字の上までをヤンク
yf{char}
指定の文字数分ヤンク
{number}yl
単語のヤンク
yiw
カーソル位置の後ろにペースト
p
直前の操作を取り消し
u
カーソル位置の行を削除
dd
カーソル位置の行を削除してインサートモード
cc
カーソル位置の行からn行目までを削除
dnG
カーソル位置から行末まで削除
D
カーソル位置から行末まで削除してインサートモードC

◆インデントを整理する
１）Shift+v
２）行選択（J or K）
３）上げる場合は<
　　下げる場合は>

◆タブ分割
垂直分割してファイルを開く
:vsplit filename
分割したウィンドウを閉じる
:clo

◆ファイル差分
下記は現在開かれているタブページ内を比較対象とする
:windo diffthis
差分表示の終了
:windo diffoff

◆短形選択モードでの操作
１）Ctrl+vで短形選択モードに入る
２）hjklで追加したい行頭（行末）を選択する
３）行頭に挿入する（I）で//を入力する
４）Escキーを押す

◆エクスプローラー表示
エクスプローラー表示する
:Explore
タブでファイルを開く
t
新規ファイル作成
:edit filename

◆分割された画面
カーソルを1つ下のwindowに移動
<Ctrl+w>j
カーソルを1つ上のwindowに移動
<Ctrl+w>k

◆外部コマンド使用
カレントディレクトリ一覧
:! ls
ファイル削除
:! del *.c
C++の使用
:! g++ Main.cpp -o hello
外部コマンドの実行結果を開いているファイルのカーソルの下の行に記録する
:r! g++ Main.cpp -o hello

◆移動系
指定の行(53行目）へ移動：
53gg
ファイルの先頭に移動
gg
単語の終端に移動
e
ファイルの末尾に移動
G
その行の順方向に一文字検索
f
その行の逆方向に一文字検索
F
先頭行に合わせる
zt
最下行に合わせる
zb
画面の真ん中に合わせる
zz
インサートモードでカーソルを一行下に移動
ctrl+j
◆検索・置換
キーワード補完インサートモードで合致する単語を順方向から検索
ctrl+n
前方検索
/pattrn
後方検索
?pattrn
検索結果のハイライトを消去する
:noh
カーソル位置の単語を検索して移動する
*n
指定の行の指定の文字ないし文字列を置換する：<開始行番号>,<終了行番号>s/<置換前>/置換後/g
例）122行目のTest2をTest3に置換したい場合
:122s/2/3/g

◆ファイル全体で確認をしながら置換
:%s/置換前/置換後/gc
例）以下の選択ができる
y:置換する
n:置換しない
q(Esc):置換モード終了

◆アルファベットの大文字と小文字を切り替える
ビジュアルモードで大文字
U
ビジュアルモードで小文字
u

◆grep
★準備
1)Git for Windowsに含まれるgrepを使用する
  Git for Windowsの公式サイトからインストーラをダウンロードし、インストール
2)インストール時に「Use Git from the Windows Command Prompt」を選択するか、
  インストールディレクトリ（例：C:\Program Files\Git\usr\bin）をシステムの環境変数PATHに追加
3)vimrcに下記を追加する
set grepprg=grep\ -nH\ $*

★活用方法
１）カレントディレクトリの確認
:pwd
２）検索フォルダやホームディレクトリへの移動
:cd /path/abc/def
:cd ~
３）カレントディレクトリ内の全てのファイルを検索
:grep hoge *

★Quickfixリストでのナビゲート
リストを開く
:copen
リストの検索先に移動する
:cc [number]
リストの次の検索結果
:cnext
リストを前の検索結果
:cprev
リストを閉じる
:cclose


◆タブ操作
タブの新規作成
:tabnew
次のタブに移動
gt
複数のファイルをタブで開く
vim -p file1.txt file2.txt 
現在のタブを閉じる
:tabclose

◆インクリメントデクリメント
インクリメント
ctrl+a
デクリメント
ctrl+x

◆複数行をまとめて連結する
ビジュアルモード (SHIFT-V) で複数行を選択してから J 

◆インサートモードで使用できるコマンド
一文字削除
Ctrl + h
一単語削除
Ctrl + w
現在の行でカーソルより前に入力した文字をすべて削除
Ctrl + u

◆ファイル操作
直前の操作を取り消し(アンドゥ)
u
戻る（リドゥ）
ctrl+r
保存
:w
終了
:q
保存して終了
:wq
すべてのタブで作業を保存して終了する
:wqa
すべてのタブで作業を保存せず終了する
:qa!
新規ファイルの保存
:w filename
コマンド履歴の表示
q:

◆モード切り替え
ビジュアルモード
v
行末に移動しインサートモード
A
行頭に移動しインサートモード
I
ノーマルモード
ctrl+c
```

## vimrcの内容
```vimrc
set number
set guioptions-=m
syntax on
colorscheme wildcharm
set expandtab " タブ入力を複数の空白入力に置き換える
set tabstop=4 " 画面上でタブ文字が占める幅
set softtabstop=4 " 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set autoindent " 改行時に前の行のインデントを継続する
set smartindent " 改行時に前の行の構文をチェックし次の行のインデントを増減する
set shiftwidth=4 " smartindentで増減する幅
" 挿入モードでバックスペースで削除できるようにする
set backspace=indent,eol,start
set incsearch " インクリメンタルサーチ. １文字入力毎に検索を行う
set ignorecase " 検索パターンに大文字小文字を区別しない
set smartcase " 検索パターンに大文字を含んでいたら大文字小文字を区別する
set hlsearch " 検索結果をハイライト
" 検索結果がファイル末尾まで進んだら、ファイルっ先頭から再び検索
set wrapscan
" バックアップファイルを作成しない
set nobackup
set noswapfile
" カーソルを行末の一時文超えるようにせてい
set virtualedit=onemore
" ビープ音を消す
set belloff=all
" マッチ件数を表示
set shortmess-=S
" クリップモードとヤンク
set clipboard+=unnamedplus,unnamed
" フォントとサイズ
set guifont=Consolas:h16
set wildmenu " コマンドモードの補完
set history=5000 " 保存するコマンド履歴の数
set relativenumber
" リスト文字の表示設定
" set listchars=tab:>-,space:·
" リスト表示を有効にする
" set list
```

### vimrcの内容(準備が必要な設定)
```vimrc
set grepprg=grep\ -nH\ $*
```

### dein導入の準備
以下の記事を参考にしてdeinのダウンロードを実施した

https://qiita.com/edo1z/items/630ce02aeb5b13e49966

```
$ cd
$ mkdir .vim
$ cd .vim
$ git clone https://github.com/Shougo/dein.vim.git
```
### molokai、Unite、nerdtree、fzf.vim、vim-fugitiveの導入(vimrcの追記内容)
```vimrc
if &compatible
    set nocompatible
endif
set runtimepath+=~/.vim/dein.vim

call dein#begin(expand('~/.vim/dein'))
call dein#add('tomasr/molokai')
call dein#add('Shougo/unite.vim')
call dein#add('preservim/nerdtree')
call dein#add('junegunn/fzf', {'build': './install --all'})
call dein#add('junegunn/fzf.vim')
call dein#add('tpope/vim-fugitive')
call dein#end()

if dein#check_install()
    call dein#install()
endif

colorscheme molokai
set t_Co=256

autocmd VimEnter * NERDTree
nnoremap <C-t> :NERDTreeToggle<CR>
```
### NERDTreeのコマンド
```
水平にファイルを開く
s
タブで開く
t
Vimを起動したときに自動的にNERDTreeを開くようにする
autocmd VimEnter * NERDTree
ファイルツリーの表示と非表示の切り替え
nnoremap <C-t> :NERDTreeToggle<CR>
カーソルのあるディレクトリの再読み込み
r
```

### fzf.vimのコマンド
```
ファイル検索
:Files
行検索
:Lines
```
### vim-fugitiveでのGitコマンド
参考記事

https://qiita.com/tashua314/items/35521f9bada5fe00cca7
```
状態確認コマンド
:Git
addコマンド
:Gwrite
commitコマンド
:Git commit
pushコマンド
:Git push
```