vim 使うコマンド、プラグイン　メモ

# 背景

上長から、vim いいよ！使おう！と言われたので、使い始めたのだが。
使いたい細々とした機能・ショートカットが分からず、都度調べたりしたので。
忘れた時にすぐ使えるように、メモとして残す。

# コマンド集

以下、control は `C-` と略す。

| 説明 | コマンド | 参考記事 |
|:--|:--|:--|
| 1行をカットする | `dd` | [参考記事](https://php-web.net/vim/text.html) |
| 範囲行を削除する | 開始行にカーソルを移動する<br>`V (shift + v)` で、行ビジュアルモードに切り替える<br>終了行にカーソルを移動する<br>`d` で削除する | [参考記事](https://howpon.com/20696#:~:text=%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-,%E5%89%8A%E9%99%A4%E3%81%97%E3%81%9F%E3%81%84%E7%AF%84%E5%9B%B2%E3%81%AE%E6%9C%80%E5%88%9D%E3%81%AE%E8%A1%8C%E3%81%BE%E3%81%A7%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92,%E8%A1%8C%E3%82%92%E5%89%8A%E9%99%A4%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82) |
| 複数行をカットする | 開始行にカーソルを移動し、`ms`<br>終了行にカーソルを移動し、`me`<br>`:'s,'ed` + Enter でカットする | [参考記事](https://www.softel.co.jp/blogs/tech/archives/2661#:~:text=%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E7%9F%AD%E3%81%8F%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81-,1%E3%80%81%E3%82%AB%E3%83%83%E3%83%88%EF%BC%88%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%E3%83%A4%E3%83%B3%E3%82%AF%EF%BC%89%E3%81%97%E3%81%9F%E3%81%84%E7%AF%84%E5%9B%B2%E3%81%AE%E9%96%8B%E5%A7%8B%E3%81%AE,%E3%82%AB%E3%83%83%E3%83%88%E3%80%81%20y's%20%E3%81%A7%E3%83%A4%E3%83%B3%E3%82%AF%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82) |
| ファイル内で文字列検索する | `/` + 文字列 |   |
| 検索のハイライトを消す | `:noh` | [参考記事](https://kaworu.jpn.org/vim/vim%E3%81%AE%E6%A4%9C%E7%B4%A2%E3%81%AE%E3%83%8F%E3%82%A4%E3%83%A9%E3%82%A4%E3%83%88%E3%82%92%E6%B6%88%E3%81%99%E6%96%B9%E6%B3%95#:~:text=%3Anoh%20%E3%81%A7%E6%A4%9C%E7%B4%A2%E3%81%AE%E3%83%8F%E3%82%A4,%E6%B6%88%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82) |
| NerdTree で新規ファイルを作成する |  `m`<br>`a`<br>ファイル名をタイプする |   |
| 複数行をインデントする | 開始行にカーソルを移動する<br>`V (shift + v)` で、行ビジュアルモードに切り替える<br>終了行にカーソルを移動する<br>`>` or `<` でインデントする | [参考記事](https://www.kabegiwablog.com/entry/2017/08/15/213259#:~:text=%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%82%92%E5%8B%95%E3%81%8B%E3%81%97%E3%81%A6%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88,%E3%81%A8%E3%81%8D%E3%81%AF%20Shift%20%2B%20%3C%20%E3%81%A7%E3%81%99%E3%80%82) |
| 検索候補から、特定のファイル・ディレクトリを除外する | :set wildignore+=directoryName/**<br>:set wildignore+=fileName.extensionName　| [参考記事](https://senooken.jp/post/2016/06/11/#mozTocId575156) |
| 複数ファイルを検索する | :vim /keyWord/g dirName/fileName &#124; cw<br>対象ディレクトリを指定しない場合は、 `**`<br>対象ファイルを指定しない場合は、　　`*` | [参考記事](https://vim.blue/vimgrep-files-cwindow/) |
| 開いているファイルの状態を保存する | `:mks` で、セッションを保存する<br>`:qa` で、vim を終了する<br>`vim -S Session.vim` で、セッションを復元する<br>`:mks!` で、セッションを上書きする | [参考記事](https://kaworu.jpn.org/kaworu/2007-07-15-7.php) |
| カレントウィンドウを端へ移す | `C-w L (shift + l)` で、右へ移す<br>`C-w H (shift + h)` で、左へ移す<br>`C-w J (shift + j)` で、下へ移す<br>`C-w K (shift + k)` で、上へ移す | [参考記事](https://lemniscus.hatenablog.com/entry/20121022/1350920565) |
| 新しいウィンドウに、新規ファイルを開く | `:new`  | [参考記事](https://vim-jp.org/vimdoc-ja/usr_08.html#08.2) |
| 新規タブを開く | `:tabe` | [参考記事](https://spirits.appirits.com/doruby/9017/) |
|　undo で戻した操作を、元に戻す　|　`C-r`　| [参考記事](http://www.webhtm.net/vim/undo.htm) |
| 対になっている括弧に移動する | `%` | [参考記事](https://maku77.github.io/vim/basic/move-cursor.html#:~:text=%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E6%8B%AC%E5%BC%A7%E3%81%AB%E3%82%B8%E3%83%A3%E3%83%B3%E3%83%97%E3%81%99%E3%82%8B&text=%E3%83%8E%E3%83%BC%E3%83%9E%E3%83%AB%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E3%81%A8%E3%81%8D%E3%80%81%E6%8B%AC%E5%BC%A7,%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82) |
| マッチした文字列を置換する | `:%s/BEFORE/AFTER/gc` | [参考記事](https://qiita.com/shirochan/items/a16487d0739f455b5e8a) |

# プラグイン集

- git 関連
    - vim-fugitive
        - 実際に使うには、`.vimrc` に `Plug 'tpope/vim-fugitive'` を追加して、`:PlugInstall` する。
        - [tpope/vim-fugitive](https://github.com/tpope/vim-fugitive)
- 検索 関連
    - fzf.vim
        - `:GFiles` で、大体いける。
        - [junegunn/fzf.vim](https://github.com/junegunn/fzf.vim)
- カラースキーマ 関連
    - doom-one.vim
        - [romgrk/doom-one.vim](https://github.com/romgrk/doom-one.vim)
- インデント 関連
    - indentLine
        - ネストの深さを、線で可視化できる。普段はこれ。
        - [Yggdroot/indentLine](https://github.com/Yggdroot/indentLine)
    - vim-indent-rainbow
        - ネストの深さを、色で可視化できる。F9等 で ON/OFF 可能。
        - [adi/vim-indent-rainbow](https://github.com/adi/vim-indent-rainbow)

# .vimrc 設定

- NERDTree とセッションの共存
    - 最初 NERDTree を設定し、その後セッションを使い始めたところ、セッションのリストア時にエラーが起きてたので、下記のような設定を .vimrc に入れた
        - [参考記事: stackoverflow](https://stackoverflow.com/questions/4226905/vim-nerdtree-not-recovered-in-session-restore)

```vim:~.vimrc
function s:mksessionForcely()
  if (filereadable("Session.vim")) | mksession! Session.vim | endif
endfunction
function s:restoreSession()
  if (filereadable("Session.vim")) | source Session.vim | endif
endfunction
" Save session on quitting Vim
autocmd VimLeave * NERDTreeClose
autocmd VimLeave * call s:mksessionForcely()
" Restore session on starting Vim
autocmd VimEnter * call s:restoreSession()
autocmd VimEnter * NERDTree

```

- スペースなどの可視化
    - [参考記事](https://blog.delphinus.dev/2011/08/display-invisible-characters-on-vim.html)

```vim:~/.vimrc
set list
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
```