文章目录
- [配置与安装 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.json
json"macros": { "saveAndEscapeNeovim": [ "workbench.action.files.save", "VSCode-NeoVim.escape" ] }
-
添加键映射
keybindings.json
json{ "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 | 创建新目录 |