打包自己的neovim配置

neovim IDE基本使用说明


安装须知

仓库地址: https://github.com/HUAHUAI23/nvim64

需要准备的东西

  • 请确保系统有gittarcurlwget,和基本的编译环境例如 gcclibstdc++ 库,ubuntu可以通过sudo apt install git tar curl wget build-essential 安装上面所需软件。

  • 网络环境可以流畅的访问github

如何安装

nvim.tar包的目录结构如下

├── initial.sh
├── int42.sh
├── nvim-linux64.tar
├── open.sh
├── runtime
└── share

nvim-linux64.tar是neovim官方的portable版 https://github.com/neovim/neovim/releases/tag/v0.7.2

将nvim.tar包下载下来后执行如下命令

tar -xf nvim.tar
cd nvim64
bash initial.sh
rm -rf trush
cd nvim-linux64/bin/

# 将为当前shell环境添加alias,即终端输入n就可以打开neovim,等效于nvim-linux64/bin/nvim
source int42.sh

第一次进入neovim后,neovim会自动下载插件,下载完插件后可以退出待第二次继续进入neovim,第二次进入neovim时请执行:TSupdate 更新treesitter和执行:PackSync 更新插件,为保证LSP正常工作,须执行:Mason 然后将这些全部安装"bash-language-server", "shfmt", "shellcheck", "stylua", "lua-language-server", "black", "pyright", "pylint", "debugpy", "clang-format", "clangd", "cpptools", "eslint-lsp", "eslint_d", "node-debug2-adapter", "typescript-language-server", "quick-lint-js", "prettier", "sqls", "sql-formatter", "json-lsp", "html-lsp", "fixjson", "emmet-ls", "css-lsp"

Mason安装上述LSP DAP Linter Formatter 可能需要安装nodejspython venvgolang环境。

ubuntu下nodejs安装参考 nvm: https://github.com/nvm-sh/nvm

golang: sudo apt install golang

python venv: sudo apt install python3 python3-venv

我的neovim可以做什么

我的neovim配置了c,python,nodejs,lua,bash,ts,sql的LSP,代码调试功能配置了python和nodejs。

我的neovim首页

我的neovim首页

neovim插件介绍

写在前面,约定习俗

  • <> 表示必选项,例如 表示必须选择一个数字。

  • [] 表示可选项。

  • ctrl-i 表示组合键 ctrl i ,sp 表示组合键 s p

  • 表示空格键 表示enter键 表示Tab键。

  • | 表示或

  • :h ZZ 表示在vim normol模式下输入:h ZZ ,即进入command模式然后输入h ZZ,h是help的缩写,即help命令。

目录

  • 1 vim
    • 1.1 vim基础
  • 2 我的neovim插件配置
    • 2.1 配置文件目录结构说明
    • 2.2 neovim键位映射说明
    • 2.3 插件介绍

1 vim

1.1 vim基础

  • 常用模式

    vim有四种常用模式,分别是命令模式(command),编辑模式(insert),普通模式(normal),视图模式(view)。

  • 模式切换

    normal模式下通过i I o O a A 进入insert模式,insert模式通过Esc 进入normal模式,normal模式通过V Ctrl-v v ctrl-q 进入view模式,normal模式通过: 进入命令模式。

  • normal模式下常见操作

    hjkl 方向键上下左右

                 k
               h   l
                 j
    

    0 ^ 光标跳到行首,$ 光标跳到行尾,gg 光标跳到首行,G 光标跳到末行,gg 跳转到number行。

    ctrl-i 光标跳转至上一个位置,ctrl-o 光标跳转至下一个位置,可通过:jumps 命令查看具体的跳转表。

    f 在当前行查找字母,并把光标跳转至该字母。

    / |? 在全文种搜索指定文字。

    ZZ 退出vim,与wq 相似,但有一些差异,具体可参考:h ZZ

    r 替换单个字母,R 连续替换,x 删除光标位置处字符,X 删除光标前面的一个字符,D 当光标处到行尾的字符剪切至vim剪切板寄存器中,dd 将当前行内容剪切至vim剪切板寄存器中,yy 复制当前行内容到vim剪切板寄存器中,u 回退至上一个状态,p 将寄存器剪切板中的内容粘贴到光标位置,w 光标跳转至下一个单词首字母,b 光标跳转至上一个单词首字母,e 光标跳转至当前单词尾字母。

  • 一些有关vim motion操作

    normal模式下motion操作可以更方便的编辑文字,下面列举一些例子:

    dw 将光标位置一直到该单词词尾剪切至vim剪切板寄存器中,该行为等同de ,diw 将光标位置单词剪切至vim剪切板寄存器中,d5l 从光标位置向左一共5个字符剪切至vim剪切板寄存器中,di' 将单引号内的内容剪切至vim剪切板寄存器中(i可以理解为in),类似的动作还有dG dfl(将光标位置到字符l间的内容剪切至vim剪切板寄存器中) cw ciw(将当前光标位置单词剪切至vim剪切板寄存器中,并进入insert模式) ci' cfl y6j (从光标位置开始向下复制6行内容至vim剪切板寄存器中),6j (光标向下移动6行)更多参考:h motion

  • 有关光标跳转操作

    ctrl-f 光标向下跳转半页,ctrl-b 光标向上跳转半页,ctrl-u 光标向上跳转多行,ctrl-d 光标向下跳转多行,() jump statement,{} jump section, % 跳转至对应闭合括号,ctrl-i 光标跳转至上一个位置,ctrl-o 光标跳转至下一个位置,可通过:jumps 命令查看具体的跳转表。

  • 与窗口相关操作

    在vim中有着window tab buffer概念,buffer即缓存区,它存储着内容,比如当前编辑的文件,这涉及到Linux的一个概念,在Linux中一切都是文件都是数据,你当前编辑的文件就是一个数据流,该数据流暂存在内存的一块地址中(buffer),最后发生一次io写入到硬盘中,在Linux中硬盘也是一个文件,可以通过ls /dev/ 查看。buffer中的数据通过window展示,即在vim中打开一个窗口展示buffer中的数据,tab则为布局方式,组织排列窗口的布局。

                        vim
    tab
    +----------------------+-------------------------+
    | window               | window                  |
    | 10101010101010101010 |                         |
    | 10010101010101010101 |                         |
    | 11100001010101010101 |                         |
    | 100000111~~~+-------------->buffer             |
    |                      |                         |
    +-------------------------------------------------+
    | window               |                         |
    |                      |                         |
    |                      |                         |
    |                      |                         |
    |                      |                         |
    |                      |                         |
    +----------------------+-------------------------+
    

    :split 沿着水平方向打开一个新的window,:vsplit 沿着垂直方向打开一个新的window。

    :split 打开一个新的文件

    :vsplit

  • normal模式下一些查找操作

    # 向上查找光标处单词,* 向下查找光标处单词,/ 进入搜索,? 进入搜索,N 在搜索中向上跳转(上一个),n 在搜索中向下跳转(下一个)

  • 其他一些normal模式下常用功能

    :s/a/b 将当前行找到的第一个a替换成b

    :s/a/b/g 将一行中找到的a均换成b

    :%s/a/b/g 将当前buffer中所有的找到的a替换成b

    :2,6s/a/b/g 将2到6行的找到的a替换成b

    :set nohli 取消搜索高亮,:set past 设置进入粘贴模式,:set nopas 退出粘贴模式。

2 我的neovim插件配置

2.1 配置文件目录结构说明

neovim在启动阶段会加载目录 $XDG_CONFIG_HOME/nvim 下的init.vim文件或init.lua文件,sysinit.vim在neovim启动阶段也会被加载,一般这个文件在目录 $VIM/sysinit.vim 下,更详细的说明参考:h config 。在neovim启动过程中,sysinit.vim会拉起我的neovim配置,sysinit.vim在目录 nvim-linux64/share/nvim/ 下,我的配置文件在吗目录 nvim-linux64/share/nvim/runtime/lua/ 下,下面是目录nvim-linux64/share/nvim/runtime/lua/ 的目录结构。

├── autocmd.lua
├── basic.lua
├── cmp
│   └── cmp.lua
├── colorscheme.lua
├── dap
│   └── nvim-dap
│   ├── config
│   │   ├── cpp.lua
│   │   └── nodejs.lua
│   └── setup.lua
├── init.lua
├── keybindingAlias.lua
├── keybindings.lua
├── lsp
│   ├── common-config.lua
│   ├── config
│   │   ├── bash.lua
│   │   ├── clangd.lua
│   │   ├── css.lua
│   │   ├── emmet-ls.lua
│   │   ├── eslint.lua
│   │   ├── html.lua
│   │   ├── json.lua
│   │   ├── lua.lua
│   │   ├── pyright.lua
│   │   ├── quick-lint-js.lua
│   │   ├── sqls.lua
│   │   └── tsserver.lua
│   ├── null-ls.lua
│   ├── setup.lua
│   └── ui.lua
├── plugin-config
│   ├── bufferline.lua
│   ├── comment.lua
│   ├── dashboard.lua
│   ├── fidget.lua
│   ├── indent-blankline.lua
│   ├── lualine.lua
│   ├── neoscrolL.lua
│   ├── nvim-autopairs.lua
│   ├── nvim-tree.lua
│   ├── nvim-treesitter.lua
│   ├── project.lua
│   ├── telescope.lua
│   ├── todo-comments.lua
│   ├── toggleterm.lua
│   ├── trouble.lua
│   └── zen-mode.lua
└── project.md

autocmd.lua为定义的一些vim autocmd比如在yank的时候高亮yank的内容,对指定文件保存时进行格式化处理,basic.lua为对neovim一些基本编辑属性的配置,比如定义2个空格等于一个tab,cmp目录里的配置文件为neovim写代码时自动补全配置。

****neovim 代码补全**

Tab键代码补全

colorscheme.lua定义了neovim的主题,配色,dap目录里的文件为neovim代码调试器相关配置。

neovim 调试代码

调试代码

init.lua为初始化配置文件,即sysinit.vim拉起init.lua,init.lua拉起后续的配置文件,keybindings.lua定义neovim一些键位映射,lsp目录下的配置文件为neovim LSP相关配置,neovim LSP包括neovim的一些代码定义跳转,引用跳转,代码提示等。

neovim—LSP

LSP功能

plugin-config目录下的文件为各种插件的配置文件。

2.2 neovim键位映射说明

  1. 基本键位映射

    定义neovim的Leader键为;,leader键是什么,详细可以参考:h

    可以通过修改keybindingAlias.lua文件定义自己的键位映射

    • normal模式下键位映射

      取消了normal模式下 HLs 键的默认功能。

      进入command模式

      H , L 光标向左移动35个字符,光标向右移动35个字符

      sp , P 进入粘贴模式,退出粘贴模式,什么是粘贴模式参考 :h 'paste'

      ctrl-u ctrl-d 向上向下移动多行光标

      ctrl-j ctrl-k 向上向下移动多行光标

      q 关闭当前window,w 保存当前window的buffer(将当前window的内容保存),WQ 关闭所有window,Q 退出neovim并且不保存buffer

      sh , sv 新建水平window,新建垂直window,s←s→s↑s↓ 上下左右切换window,sw 按顺时针方向依次切换window

      sksjs,s. 将window向上移动2点,将window向下移动2点,将window向左移动2点,将window向右移动2点,s= 将window恢复默认大小

    • insert模式下键位映射

      取消了insert模式下ctrl-f 的默认功能

      进入command模式

      进入normal模式

    • visual模式下键位映射

      ctrl-j ctrl-k 向上向下移动多行光标

    • command模式下键位映射

      ctrl-j ctrl-k 在命令补全窗口中向上移动向下移动

    • terminal模式下键位映射

      normal模式下st 水平方向上打开终端window

      normal模式下stv 垂直方向上打开终端window

      terminal模式回到normal模式

      s←s→s↑s↓ 上下左右切换window

  2. 插件键位映射

    插件键位一般是在normal模式下

    • nvimTree

      f 打开|关闭 nvimTree

    • LSP

      rn 重命名变量

      ca 打开LSP行为

      gd 跳转至定义,gh 打开文档,gr 跳转至引用,gjgk 跳转至上一个语法检查,跳转至下一个语法检查,gl 打开语法检查列表,f 格式化代码。

    • DAP

      打开代码调试, 执行下一步,w 关闭代码调试,T 去掉所有中断点,t 标记中断点,h 光标处表达式求值,visual模式下 光标处表达式求值。

    • bufferline

      j k 切换到左边的buffer,切换到右边的buffer,h l 向左交换buffer,向右交换buffer。

    • telescope

      normal模式和insert模式下 ctrl-f 在当前buffer中查找内容。

    • cmp

      shiftctrl-kctrl-j 自动补全框向上选择,向下选择, 选中,ctrl-uctrl-d 自动补全扩展窗口向下移动,向上移动,ctrl- 打开自动补全,e 关闭自动补全。

    • toggerterm

      ta 打开|关闭 终端,tb 打开|关闭 终端,tc 打开|关闭 终端。

2.3 插件介绍

  1. LSP

    LSP相关详细内容参考 :h lsp
    LSP: https://github.com/neovim/nvim-lspconfig
    null-ls: https://github.com/jose-elias-alvarez/null-ls.nvim
    mason: https://github.com/williamboman/mason.nvim

    :LspInfo :LspLog :NullLsInfo :NullLsLog 可以查看LSP client相关情况。

  2. bufferline

    bufferline:https://github.com/akinsho/bufferline.nvim

    :BufferLinePick 切换至选中的buffer

    :BufferLinePickClose 关闭选中的buffer

    :BufferLineCloseLeft 关闭当前buffer左边的所有buffer

    :BufferLineCloseRight 关闭当前buffer右边的所有buffer

  3. lspsaga

    lspsage: https://github.com/glepnir/lspsaga.nvim

    :LSoutlineToggle 打开outline

    lspsage outline

    outline

    在lspsaga窗口中,o 可以跳转至对应变量处

    lspsage提供很多有关LSP的东西,:Lspsaga

  4. nvim-tree

    nvimTree: https://github.com/kyazdani42/nvim-tree.lua

    :NvimTreeToggle 打开|关闭nvimTree窗口,

    下面列举nvimTree窗口一些常用的快捷键指令

    ``            edit                open a file or folder; root will cd to the above directory
    `I`               toggle_git_ignored  toggle visibility of files/folders hidden via |git.ignore| option
    `H`               toggle_dotfiles     toggle visibility of dotfiles via |filters.dotfiles| option
    `U`               toggle_custom       toggle visibility of files/folders hidden via |filters.custom| option
    `R`               refresh             refresh the tree
    `a`               create              add a file; leaving a trailing `/` will add a directory
    `d`               remove              delete a file (will prompt for confirmation)
    `D`               trash               trash a file via |trash| option
    `r`               rename              rename a file
    `x`               cut                 add/remove file/directory to cut clipboard
    `c`               copy                add/remove file/directory to copy clipboard
    `p`               paste               paste from clipboard; cut clipboard has precedence over copy; will prompt for confirmation
    `y`               copy_name           copy name to system clipboard
    `Y`               copy_path           copy relative path to system clipboard
    `gy`              copy_absolute_path  copy absolute path to system clipboard
    `s`               system_open         open a file with default system application or a folder with default file manager, using |system_open| option
    `f`               live_filter         live filter nodes dynamically based on regex matching.
    `F`               clear_live_filter   clear live filter
    `q`               close               close tree window
    `W`               collapse_all        collapse the whole tree
    `E`               expand_all          expand the whole tree, stopping after expanding |actions.expand_all.max_folder_discovery| folders; this might hang neovim for a while if running on a big folder
    `S`               search_node         prompt the user to enter a path and then expands the tree to match the path
    `.`               run_file_command    enter vim command mode with the file the cursor is on
    ``           toggle_file_info    toggle a popup with file infos about the file under the cursor
    `g?`              toggle_help         toggle help
    `m`               toggle_mark         Toggle node in bookmarks
    `bmv`             bulk_move           Move all bookmarked nodes into specified location
    
  5. treesitter

    treesitter: https://github.com/nvim-treesitter/nvim-treesitter

    一些常用treesitter命令

    :TSupdate 更新treesitter语法树

    :TSBufEnable 启用treesitter相应模块

    :TSBufDisable 不启用treesitter相应模块

    :TSmoduleInfo 查看treesitter模块信息

  6. telescope

    telescope: https://github.com/nvim-telescope/telescope.nvim

    telescope 窗口的默认键位映射

    Mappings Action
    / Next item
    / Previous item
    j/k Next/previous (in normal mode)
    H/M/L Select High/Middle/Low (in normal mode)
    gg/G Select the first/last item (in normal mode)
    Confirm selection
    Go to file selection as a split
    Go to file selection as a vsplit
    Go to a file in a new tab
    Scroll up in preview window
    Scroll down in preview window
    Show mappings for picker actions (insert mode)
    ? Show mappings for picker actions (normal mode)
    |q Close telescope
    Close telescope (in normal mode)
    Toggle selection and move to next selection
    Toggle selection and move to prev selection
    Send all items not filtered to quickfixlist (qflist)
    Send all selected items to qflist

    在insert模式下输入ctrl-/ 和在normal模式下输入? 都可以获取对应模式下默认的键位映射。

    :Telescope 会列举所有的telescope模块,键入模块名以调用相应模块

    :Telescope

    :Telescope

    常用telescope模块 :Telescope [find_file|live_grep|buffers|env|diagnostics|keymaps|highlights|man_pages|help_tags...]

  7. project

    project: https://github.com/ahmedkhalf/project.nvim

    :Telescope project 打开项目窗口

    项目窗口下的默认键位映射

    Normal mode Insert mode Action
    f find_project_files
    b browse_project_files
    d delete_project
    s search_in_project_files
    r recent_project_files
    w change_working_directory

    通过在项目目录创建名为project.md的文件,包含project.md的目录将成为项目根目录,可通过修改project插件配置文件的patterns来自定义自己的项目跟目录匹配模式。

    project插件配置文件

    project配置
  8. comment todo

    commentTodo: https://github.com/folke/todo-comments.nvim

    类似vscode的todotree

    触发todo的关键词

    todo关键词
    常用的todo命令
    :TodoQuickFix
    :TodoLocList
    :TodoTrouble
    :TodoTelescope
    :TodoTrouble cwd=~/projects/foobar
    
  9. trouble

    trouble: https://github.com/folke/trouble.nvim

    Trouble comes with the following commands:

    • :Trouble [mode]: open the list
    • :TroubleClose [mode]: close the list
    • :TroubleToggle [mode]: toggle the list
    • :TroubleRefresh: manually refresh the active list

    mode = "workspace_diagnostics"|"workspace_diagnostics"|"document_diagnostics", "quickfix"|"lsp_references"|"loclist"

    trouble窗口默认键位映射

    close = "q", -- close the list
    cancel = "", -- cancel the preview and get back to your last window / buffer / cursor
    refresh = "r", -- manually refresh
    jump = {"", ""}, -- jump to the diagnostic or open / close folds
    open_split = { "" }, -- open buffer in new split
    open_vsplit = { "" }, -- open buffer in new vsplit
    open_tab = { "" }, -- open buffer in new tab
    jump_close = {"o"}, -- jump to the diagnostic and close the list
    toggle_mode = "m", -- toggle between "workspace" and "document" diagnostics mode
    toggle_preview = "P", -- toggle auto_preview
    hover = "K", -- opens a small popup with the full multiline message
    preview = "p", -- preview the diagnostic location
    close_folds = {"zM", "zm"}, -- close all folds
    open_folds = {"zR", "zr"}, -- open all folds
    toggle_fold = {"zA", "za"}, -- toggle fold of current file
    previous = "k", -- preview item
    next = "j" -- next item
    

    o 经常用到

  10. toggleterm

    toggleterm: https://github.com/akinsho/toggleterm.nvim

    常用的toggleterm命令
    :TermExec
    :ToggleTerm
    :ToggleTermToggleAll
    :ToggleTermSetName work
    :ToggleTermSendCurrentLine 
    :ToggleTermSendVisualLines 
    :ToggleTermSendVisualSelection 
    
  11. cmp

    cmp: https://github.com/hrsh7th/nvim-cmp

    :CmpStatus 查看cmp加载状态

你可能感兴趣的:(打包自己的neovim配置)