# Neovim 配置

这次决定从头开始打造自己的编辑器,其中所有的功能都是自行组装

使用的插件列表如下

| name                            | decription                                                          |
|---------------------------------|---------------------------------------------------------------------|
| nvim-telescope/telescope.nvim   | 查找,过滤,预览文件                                                  |
| kdheepak/lazygit.nvim           | 与lazygit进行集成,需要自行安装lazygit,用法可参考lazygit的github页面 |
| nvim-treesitter/nvim-treesitter | 高性能的语法高亮                                                    |
| folke/which-key.nvim            | 快捷键弹窗查看和更方便的快捷键设置                                  |
| akinsho/bufferline.nvim         | 顶部标签栏                                                          |
| hrsh7th/nvim-cmp                | 优秀的补全插件                                                      |
| hrsh7th/cmp-path                | 补全路径                                                            |
| hrsh7th/cmp-buffer              | 缓冲区内重复单词补全                                                |
| hrsh7th/cmp-nvim-lsp            | 补全与lsp的集成                                                     |
| kyazdani42/neo-tree.lua         | 文件查看器,不用多说,neo-tree的兼容性更好                            |
| numToStr/Comment.nvim           | 强大的注释插件                                                      |
| windwp/nvim-autopairs           | 括号自动补全                                                        |
| ahmedkhalf/project.nvim         | 出色的项目管理工具,可与telescope集成                                |
| jose-elias-alvarez/null-ls.nvim | 代码格式化工具,还可提供其他与lsp集成的功能                          |
| neovim/nvim-lspconfig           | 快速的lsp配置工具                                                   |
| williamboman/mason.nvim         | lsp-installer作者的新作,方便管理lsp dap linter formatter等          |
| rafamadriz/friendly-snippets    | 自定义各种语言的一些代码模板                                        |
| nvim-lualine/lualine.nvim       | 底部状态栏                                                          |
| wbthomason/packer.nvim          | 大名鼎鼎的包管理工具                                                |
| rcarriga/nvim-notify            | 现代化的消息弹窗提示                                                |
| akinsho/toggleterm.nvim         | 优秀的nvim集成终端                                                  |
| mfussenegger/nvim-dap           | neovim 的dap实现                                                    |


## 快捷键
 \<leader>键被配置为空格
 \<localleader>被配置为\\
### 常用
| key            | function                                  |
|----------------|-------------------------------------------|
| T              | 打开nvim-tree文件浏览                     |
| f              | 打开telescope进行文件查找                 |
| Ctrl-h         | 切换到左标签栏                            |
| Ctrl-l         | 切换到右标签栏                            |
| \<leader>q     | 退出neovim                                |
| \<leader>s     | 保存当前文件                              |
| \<leader>S     | 保存所有文件                              |
| \<leader><tab> | 切换回上一个buffer,用于两buffer间来回切换 |
| \<leader>j     | 快速进行行跳转                            |
| ,              | 运行当前文件代码,需要自行配置各种语言     |
| Ctrl-\\        | 打开终端                                  |

### Insert模式下特殊按键
| key    | function   |
|--------|------------|
| Ctrl-a | 跳转到行首 |
| Ctrl-e | 跳转到行尾 |

### Packer 
| key         | function               |
|-------------|------------------------|
| \<leader>pi | 包同步PackerSync       |
| \<leader>pc | 包清理PackerClean      |
| \<leader>ps | 包状态查看PackerStatus |

### lsp
| key         | function                        |
|-------------|---------------------------------|
| \<leader>li | 安装当前文件语言对应的lsp服务   |
| \<leader>lI | 打开Mason安装lsp dap 等任意服务 |
| \<leader>ll | 打开Mason查看安装的服务         |
| \<leader>lu | 卸载当前语言对应的lsp           |
| \<leader>lr | 重启lsp                         |
| ]d          | 跳转到函数定义                  |
| ]i          | 跳转到函数实现                  |
| ]r          | 跳转到函数引用                  |

### git
| key        | function        |
|------------|-----------------|
| \<leader>g | 打开lazygit界面 |

### dap
| key         | function  |
|-------------|-----------|
| \<leader>db | 打断点    |
| \<leader>de | 停止debug |
| \<leader>dc | 清理断点  |
| \<leader>dr | 开始debug |
| \<Ctrl-n>   | step into |
| \<Ctrl-o>   | step over |

### buffer
| key         | function                       |
|-------------|--------------------------------|
| \<leader>bb | 打开某个buffer                 |
| \<leader>bk | 关闭当前buffer                 |
| \<leader>bc | 取消高亮(可用于搜索后取消高亮) |
| \<leader>bo | 关闭其他buffer                 |
| \<leader>bs | 搜索当前buffer                 |

### window
| key               | function           |
|-------------------|--------------------|
| \<leader>wo       | 关闭其他窗口       |
| \<leader>wd       | 关闭当前窗口       |
| \<leader>wh,j,k,l | 切换其他方向的窗口 |
| \<leader>ws       | 水平分割窗口       |


### file
| key         | function               |
|-------------|------------------------|
| \<leader>ff | telescope 文件浏览     |
| \<leader>fr | 最近打开的文件         |
| \<leader>fs | 在项目文件中搜索字符串 |
| \<leader>fp | 打开项目               |
| \<leader>fn | 新建文件               |

### markdown
| key             | function           |
|-----------------|--------------------|
| \<leader>m      | 预览markdown       |
| \<localleader>t | 在当前位置插入目录 |
| \<localleader>d | 降低所有目录等级   |
| \<localleader>i | 升高所有目录等级   |


## 问题
### 根据文件类型启动某些功能
可以在ftplugin文件夹中放入对应文件类型的lua文件,如markdown.lua对应markdown文件.写入要执行的命令即可.例子可见ftplugin/markdown中启动markdown table mode()