20240324 Neovimのcheckhealthのエラー修正、RR-automate進めた

### Neovimの気になるところ
#### tree-sitterがエラーになるので対応
```
nvim-treesitter: require("nvim-treesitter.health").check()

Installation ~
- WARNING `tree-sitter` executable not found (parser generator, only needed for :TSInstallFromGrammar, not required for :TSInstall)
- OK `node` found v21.6.2 (only needed for :TSInstallFromGrammar)
- OK `git` executable found.
- ERROR `cc` executable not found.
  - ADVICE:
    - Check that any of { vim.NIL, "cc", "gcc", "clang", "cl", "zig" } is in your $PATH or set the environment variable CC or `require"nvim-treesitter.install".compilers` explicitly!
- OK Neovim was compiled with tree-sitter runtime ABI version 14 (required >=13). Parsers must be compatible with runtime ABI.
```

mingwをscoopで入れていちおうエラーはでなくなった、Warningが気になるけど

```
nvim-treesitter: require("nvim-treesitter.health").check()

Installation ~
- WARNING `tree-sitter` executable not found (parser generator, only needed for :TSInstallFromGrammar, not required for :TSInstall)
- OK `node` found v21.6.2 (only needed for :TSInstallFromGrammar)
- OK `git` executable found.
- OK `gcc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
  Version: gcc (x86_64-posix-seh-rev1, Built by MinGW-Builds project) 13.2.0
- OK Neovim was compiled with tree-sitter runtime ABI version 14 (required >=13). Parsers must be compatible with runtime ABI.

OS Info:
{
  machine = "x86_64",
  release = "10.0.22631",
  sysname = "Windows_NT",
  version = "Windows 11 Home"
} ~

Parser/Features         H  L  F  I  J
  - python              ✓ ✓ ✓ ✓ ✓

  Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
         +) multiple parsers found, only one will be used
         x) errors found in the query, try to run :TSUpdate {lang} ~
```
※ 確認のためpythonを入れたのでチェックがついてる
とりあえず放置
#### keymapの設定場所を調べる方法
which-keyでこんな警告がでた
```
which-key: require("which-key.health").check()

WhichKey: checking conflicting keymaps ~
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"g!"**
- rhs: `<Plug>ScripteaseFilter`
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"g="**
- rhs: `<Plug>ScripteaseFilter`
```
同じアクションに違うキーが複数設定されているらしい、けどどこで？
`:verbose map g!`とやるとどこで設定されているか教えてくれる。

```:verbose map g!
x  g           * <Cmd>lua require("which-key").show("g", {mode = "v", auto = true})<CR>
        最後にセットしたスクリプト: Lua
n  g           * <Cmd>lua require("which-key").show("g", {mode = "n", auto = true})<CR>
        最後にセットしたスクリプト: Lua
x  g!            <Plug>ScripteaseFilter
        最後にセットしたスクリプト: D:/Users/(myname)/scoop/apps/nvim-data/lazy/vim-scriptease/plugin/scriptease.vim line 105
n  g!!           <Plug>ScripteaseFilter<SNR>10__
        最後にセットしたスクリプト: D:/Users/(myname)/scoop/apps/nvim-data/lazy/vim-scriptease/plugin/scriptease.vim line 102
n  g!            <Plug>ScripteaseFilter
        最後にセットしたスクリプト: D:/Users/(myname)/scoop/apps/nvim-data/lazy/vim-scriptease/plugin/scriptease.vim line 101
```

### RR-automate
やっとユニット、ヒーローをただの配列じゃなくてクラスオブジェクト使うようにできた
テストケースもそこそこ追加
* setattrであるクラスオブジェクトの値をその派生クラスオブジェクトに全部渡す
    * はじめはdeepcopyつかおうと思ったが別のクラスオブジェクトにする際、結局setattrするのでやめた
* .gitattributes便利、改行をそろえることができる。これはgithubだけの機能？
* @propertyがまだよくわかってないけどとりあえず使えたからいいや