文章目录
- [配置与安装 NeoVim](#配置与安装 NeoVim)
-
- [1. 安装 NeoVim](#1. 安装 NeoVim)
- [2. 解决 NeoVim 中文输入法的问题](#2. 解决 NeoVim 中文输入法的问题)
- [3. 配置 `Ctrl+S` 保存文件并退出insert模式](#3. 配置
Ctrl+S保存文件并退出insert模式) - [4. 取消搜索之后的高亮](#4. 取消搜索之后的高亮)
- [5. 我的配置](#5. 我的配置)
- [NeoVim 使用手册](#NeoVim 使用手册)
-
- [1. 代码执行折叠和展开的操作](#1. 代码执行折叠和展开的操作)
- [2. 内置定义的热键](#2. 内置定义的热键)
-
- [2.1 文件管理命令](#2.1 文件管理命令)
- [2.2 标签相关命令](#2.2 标签相关命令)
- [2.3 窗口相关命令](#2.3 窗口相关命令)
- 2.4代码编辑区热键
- [2.5 一些 INSERT 模式下定义的热键](#2.5 一些 INSERT 模式下定义的热键)
- [2.6 一些侧边栏中进行移动的热键](#2.6 一些侧边栏中进行移动的热键)
- [2.7 文件资源管理的热键](#2.7 文件资源管理的热键)
配置与安装 NeoVim
1. 安装 NeoVim
可以参考官方安装指南进行安装:VSCode-NeoVim installation。
- 在 VSCode 插件里搜索 VSCode-NeoVim 插件,进行安装
- 安装 NeoVim,需要安装 0.9.0 之后的版本:https://github.com/NeoVim/NeoVim/wiki/Installing-Neovim
- VSCode 设置文件
settings.json中需要添加以下设置:
json
"extensions.experimental.affinity": {
"asvetliakov.VSCode-NeoVim": 1
},
// NeoVim 安装路径,下面是 windows 和 linux(or wsl)的路径,你需要改成你的电脑上安装的路径
"VSCode-NeoVim.NeoVimExecutablePaths.win32": "C:\\Program Files\\Neovim\\bin\\nvim.exe"
- 需要添加 NeoVim 配置文件,Windows 的 NeoVim 配置文件在
C:/Users/(你的用户名)/AppData/Local/nvim/init.vim,如果路径不存在,则新建。 - VSCode-NeoVim 和 NeoVim 使用同一个
init.lua配置文件,但是在里面需要做区分,防止打开 VSCode 后会启动大量 NeoVim 的插件,影响速度。
lua
if vim.g.VSCode then
-- VSCode extension
else
-- ordinary Neovim
end
2. 解决 NeoVim 中文输入法的问题
使用 Vim 的一个痛点是当你从 INSERT 模式切换到 NORMAL 模式下,如果你在 INSERT 模式中使用的是中文输入法,那么退回到 NORMAL 模式,输入无效,NORMAL 模式只接受英文输入。
可以下载 im-select,根据 readme 安装。
我自己使用的是 Windows,将 im-select 放到目录 C:\Program Files\Im Select\im-select.exe,然后在 VSCode settings 中添加以下设置:
lua
-- 配置输入法切换的能力
vim.cmd('autocmd InsertLeave * :silent :!C:\\Program Files\\Im Select\\im-select.exe && C:\\Program Files\\Im Select\\im-select.exe 2052')
1033 是英文输入法的代码,需要在设置-语言 中提前添加英语(美国)。
使用上述配置,当退回到 NORMAL 模式,输入法会自动切换到英语输入。
3. 配置 Ctrl+S 保存文件并退出insert模式
-
安装VSCode插件: macros - Visual Studio Marketplace
-
添加配置
settings.jsonjson"macros": { "saveAndEscapeNeovim": [ "workbench.action.files.save", "VSCode-NeoVim.escape" ] } -
添加键映射
keybindings.jsonjson{ "key": "ctrl+s", "command": "macros.saveAndEscapeNeovim", "when": "editorTextFocus && NeoVim.mode == insert" }
4. 取消搜索之后的高亮
vim
:nohlsearch
:noh
5. 我的配置
没有添加任何插件,但解决很多问题:
- VSCode NeoVim 折叠代码快捷键失效
- NeoVim 搜索忽略大小写
- NeoVim 使用系统剪贴板
lua
-- 检查是否存在 VSCode 变量
if vim.g.vscode then
-- 如果存在 VSCode,则创建键映射以调用 VSCode 的命令
vim.api.nvim_set_keymap('n', 'zR', ":call VSCodeNotify('editor.unfoldAll')<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', 'zM', ":call VSCodeNotify('editor.foldAll')<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', 'zo', ":call VSCodeNotify('editor.unfold')<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', 'zc', ":call VSCodeNotify('editor.fold')<CR>", { noremap = true, silent = true })
else
-- 如果不存在 VSCode,执行普通的 Neovim 配置
-- 在这里添加普通的 Neovim 配置
end
-- 设置折叠方法为 indent
vim.opt.foldmethod = 'indent'
-- 启用搜索结果高亮
vim.opt.hlsearch = true
-- 输入搜索模式时,每输入一个字符,自动跳转到第一个匹配的结果
vim.opt.incsearch = true
-- 搜索时忽略大小写
vim.opt.ignorecase = true
-- 如果同时打开了 ignorecase,那么对于只有一个大写字母的搜索词,将大小写敏感,其他情况都是大小写不敏感
vim.opt.smartcase = true
-- 使用系统剪贴板
vim.opt.clipboard = 'unnamedplus'
NeoVim 使用手册
1. 代码执行折叠和展开的操作
- 展开所有折叠 :在 Normal 模式下按下
zR,它将触发VSCodeNotify('editor.unfoldAll'),这将展开当前文件中的所有折叠。 - 关闭所有折叠 :在 Normal 模式下按下
zM,它将触发VSCodeNotify('editor.foldAll'),这将关闭当前文件中的所有折叠。 - 展开当前折叠 :在 Normal 模式下按下
zo,它将触发VSCodeNotify('editor.unfold'),这将展开光标下的折叠。 - 关闭当前折叠 :在 Normal 模式下按下
zc,它将触发VSCodeNotify('editor.fold'),这将关闭光标下的折叠。
2. 内置定义的热键
下面这些命令都是由 VSCode-NVim 插件调用 VSCode 中的命令完成的,仅限于 COMMAND 模式下使用,这些命令在原生的 NVim中也都适用,不同的是它们并不是调用的原生命令接口。
2.1 文件管理命令
| 命令 | 描述 |
|---|---|
| :ene | 创建新的无标题文件 |
| :e | 快速打开文件 |
| :find | 按名称搜索文件 |
| :sav | 另存为文件 |
| :w | 保存当前文件 |
| :q | 关闭所有编辑器 |
| :wq | 保存当前文件,并关闭活动编辑器 |
| :x | 保存当前文件,并关闭活动编辑器 |
| :qa | 保存所有文件,并关闭所有编辑器 |
| :wa | 保存所有文件,不关闭任何编辑器 |
| :wqa | 保存所有文件,并关闭所有编辑器 |
| :xa | 保存所有文件,并关闭所有编辑器 |
2.2 标签相关命令
| 命令 | 描述 |
|---|---|
| :tabnew | 创建新的无标题文件 |
| :tabe | 快速打开文件 |
| :tabf | 按名称搜索文件 |
| :tabc | 关闭当前的的编辑器 |
| :tabo | 关闭其他所有编辑器 |
| :tabp | 切换到上一个编辑器 |
| :tabn | 切换到下一个编辑器 |
| :tabfirst | 切换到第一个编辑器 |
| :tablast | 切换到末一个编辑器 |
2.3 窗口相关命令
| 命令 | 描述 |
|---|---|
| :sp | 水平拆分编辑器 |
| :vsp | 垂直拆分编辑器 |
| :new | 水平拆分编辑器,并创建新的无标题文件 |
| :vnew | 垂直拆分编辑器,并创建新的无标题文件 |
| :only | 关闭所有的编辑器 |
下面这些热键都是由 VSCode-NVim 插件调用 VSCode 中的命令完成的,原生 NVim 中不存在下面大多数热键。
2.4代码编辑区热键
| 热键(1) | 热键(2) | 功能描述 |
|---|---|---|
| = | == | 格式化选定内容 |
| gh | K | 显示悬停 |
| gd | C-] | 转到定义 |
| gf | 无 | 转到声明 |
| gH | 无 | 查看引用 |
| gO | 无 | 转到符号 |
| C-W gd | C-W gf | 打开侧边的定义 |
| gD | 无 | 速览定义 |
| gF | 无 | 查看声明 |
| tab | 无 | 切换小部件焦点 |
| C-p | 切换上一个建议 | |
| C-n | 切换下一个建议 |
2.5 一些 INSERT 模式下定义的热键
| 热键 | 描述 |
|---|---|
| C-r [0-9a-z"%#*+:.-=] | 从寄存器粘贴内容 |
| C-a | 插入之前插入的内容 |
| C-o | 切换到NORMAL模式中执行一个命令,然后返回 |
| C-u | 删除当前光标当行首前的所有内容 |
| C-w | 删除左侧的单词 |
| C-h | 删除左侧的字符 |
| C-t | 光标向右移动,单位是一个缩进 |
| C-d | 光标向左移动,单位是一个缩进 |
| C-j | 插入新行 |
| C-c | 退出INSTER模式 |
2.6 一些侧边栏中进行移动的热键
| 热键 | 描述 |
|---|---|
| j / k | 向下向上移动光标 |
| h / l | 打开或关闭项目 |
| Enter | 打开项目 |
| gg | 返回顶部 |
| G | 返回底部 |
| o | 切换展开 |
| C-u / C-d | 向上或向下翻页 |
| Escape | 切换键盘导航 |
2.7 文件资源管理的热键
| 热键 | 描述 |
|---|---|
| r | 重命名文件 |
| d | 删除文件 |
| y | 拷贝文件 |
| x | 剪切文件 |
| p | 粘贴文件 |
| v | 以垂直拆分的方式打开文件 |
| a | 创建新文件 |
| S-a | 创建新目录 |