AstroNvimの設定を晒す〜copilotを添えて〜

# AstroNvimについて
[AstroNvim](https://astronvim.com)
NeovimをIDEっぽくしてくれる各種設定とプラグインがまとまったパッケージ
似たようなもので[LunarVim](https://www.lunarvim.org)とか[nvim-ide](https://github.com/ldelossa/nvim-ide)とか色々ある

## 設定
基本的には[Getting Started](https://docs.astronvim.com)のInstallationを見ながら設定すれば、特に追加の設定をしなくても快適に使える
個人的にAstroNvimに移行する前に使っていた[nerdtree](https://github.com/preservim/nerdtree)と同じ使い心地にするための設定、[Github Copilot](https://docs.github.com/ja/copilot/getting-started-with-github-copilot?tool=vimneovim)とgolang関係の設定、[heirline.nvim](https://github.com/rebelot/heirline.nvim)のカスタマイズを入れてる

個人設定はドキュメントにもある通り、
```
git clone https://github.com/<username>/<config_repo> ~/.config/nvim/lua/user
```
をやれば良い

というわけで私の設定は https://github.com/kane8n/AstroNvimUser にあります。

## 設定解説
### init.lua
init.luaにplugin関係の設定とvim optionの設定を入れる
#### copilot
```lua
{
  "github/copilot.vim",
  lazy = false,
  config = function()
    vim.g.copilot_no_tab_map = true
    vim.g.copilot_filetypes = { yaml = true }
    local keymap = vim.keymap.set
    -- https://github.com/orgs/community/discussions/29817#discussioncomment-4217615
    keymap("i", "<C-g>", 'copilot#Accept("<CR>")',
      { silent = true, expr = true, script = true, replace_keycodes = false })
    keymap("i", "<C-j>", "<Plug>(copilot-next)")
    keymap("i", "<C-k>", "<Plug>(copilot-previous)")
    keymap("i", "<C-o>", "<Plug>(copilot-dismiss)"
    keymap("i", "<C-s>", "<Plug>(copilot-suggest)")
  end  
}
```
- 仕事ではSREをしていて、kubernetesのmanifestをよく触るのでcopilot_filetypesにyamlを追加
- keymapは他の設定と被らないようにControlと各キーで動作するように設定

#### neo-tree.nvim
```lua
{
  "neo-tree.nvim",
  opts = function()
    return {
      filesystem = {
        window = {
          mappings = {
            -- disable fuzzy finder
            ["/"] = "noop",
            -- Jump to current nodes parent
            -- like `p` in NERDTree Mappings
            ["P"] = function(state)
              local tree = state.tree
              local node = tree:get_node()
              local parent_node = tree:get_node(node:get_parent_id())
              local renderer = require("neo-tree.ui.renderer")
              renderer.redraw(state)
              renderer.focus_node(state, parent_node:get_id())
            end,
            ["T"] = { "toggle_preview", config = { use_float = true } },
          }
        },
        filtered_items = {
          visible = true,
          hide_dotfiles = false
        }
      }
    }
  end                                                                    
}
```
- disable fuzzy finder
  - tree上でvimの検索(/)でファイル名検索して飛ぶのにfuzzy finderが邪魔だったので無効化
- Jump to current nodes parent
  - 以前使っていたNerdTreeでは`p`でtreeで一つ上の階層に飛ぶことができたので同じことができるように設定追加
- `T`でファイルのpreviewをfloat表示するように設定
- filtered_itemsの設定は隠しファイルとかドットファイルも表示する設定

#### autocommands
```lua
-- Set autocommands
vim.api.nvim_create_autocmd("VimEnter", {
  command = "Neotree toggle",
})
vim.api.nvim_create_autocmd('BufWritePre', {
  pattern = '*.go',  
  callback = function()
    vim.lsp.buf.code_action({ context = { only = { 'source.organizeImports' } }, apply = true })
  end
})
```
- VimEnterでNeotreeを起動するように設定
  - nvimを立ち上げたらNeotreeも表示する
- BufWritePre
  - goのフォーマットとimportの自動挿入をファイル保存時にするための設定

### options.lua
特筆すべき設定はしてないけど、最低限として行番号の表示と行番号の相対表示をoffにする設定を入れてる（行番号の相対表示って需要あるのだろうか
```lua
opt = {
  relativenumber = false,
  number = true
}
```