VSCode Neovim Extension

配置与安装 NeoVim

1. 安装 NeoVim

可以参考官方安装指南进行安装:VSCode-NeoVim installation

  1. 在 VSCode 插件里搜索 VSCode-NeoVim 插件,进行安装
  2. 安装 NeoVim,需要安装 0.9.0 之后的版本:https://github.com/NeoVim/NeoVim/wiki/Installing-Neovim
  3. VSCode 设置文件 settings.json 中需要添加以下设置:
"extensions.experimental.affinity": {
    "asvetliakov.VSCode-NeoVim": 1
},
// NeoVim 安装路径,下面是 windows 和 linux(or wsl)的路径,你需要改成你的电脑上安装的路径
"VSCode-NeoVim.NeoVimExecutablePaths.win32": "C:\\Program Files\\Neovim\\bin\\nvim.exe"
  1. 需要添加 NeoVim 配置文件,Windows 的 NeoVim 配置文件在 C:/Users/(你的用户名)/AppData/Local/nvim/init.vim,如果路径不存在,则新建。
  2. VSCode-NeoVim 和 NeoVim 使用同一个 init.lua 配置文件,但是在里面需要做区分,防止打开 VSCode 后会启动大量 NeoVim 的插件,影响速度。
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 中添加以下设置:

-- 配置输入法切换的能力
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

    "macros": {
        "saveAndEscapeNeovim": [
          "workbench.action.files.save",
          "VSCode-NeoVim.escape"
        ]
      }
    
  • 添加键映射 keybindings.json

    {
        "key": "ctrl+s",
        "command": "macros.saveAndEscapeNeovim",
        "when": "editorTextFocus && NeoVim.mode == insert"
      }
    

4. 取消搜索之后的高亮

:nohlsearch
:noh

5. 我的配置

没有添加任何插件,但解决很多问题:

  1. VSCode NeoVim 折叠代码快捷键失效
  2. NeoVim 搜索忽略大小写
  3. NeoVim 使用系统剪贴板
-- 检查是否存在 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. 代码执行折叠和展开的操作

  1. 展开所有折叠:在 Normal 模式下按下 zR,它将触发 VSCodeNotify('editor.unfoldAll'),这将展开当前文件中的所有折叠。
  2. 关闭所有折叠:在 Normal 模式下按下 zM,它将触发 VSCodeNotify('editor.foldAll'),这将关闭当前文件中的所有折叠。
  3. 展开当前折叠:在 Normal 模式下按下 zo,它将触发 VSCodeNotify('editor.unfold'),这将展开光标下的折叠。
  4. 关闭当前折叠:在 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 创建新目录

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 23:50:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 23:50:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 23:50:01       82 阅读
  4. Python语言-面向对象

    2024-04-23 23:50:01       91 阅读

热门阅读

  1. js 将数组返回带children的递归数组

    2024-04-23 23:50:01       33 阅读
  2. js 数组的常用方法

    2024-04-23 23:50:01       28 阅读
  3. 第二十七章:mybatis plus 如何自定义 SQL 查询条件

    2024-04-23 23:50:01       36 阅读
  4. arduino rc522

    2024-04-23 23:50:01       33 阅读
  5. Binlog、Redo 和 Undo 的概念与区别

    2024-04-23 23:50:01       36 阅读
  6. 详解Qt中的时间——QDateTime、QDate、QTime、QTimeZone

    2024-04-23 23:50:01       33 阅读
  7. Swift中的WebView

    2024-04-23 23:50:01       33 阅读
  8. AcWing 802. 区间和——算法基础课题解

    2024-04-23 23:50:01       38 阅读
  9. html实现点击按钮时下方展开一句话

    2024-04-23 23:50:01       31 阅读