VSCode中Neovim配置指南及lua中插件解决方案

接口5天前发布 聚灵AI导航
15,040,000 0 0
广告也精彩
lua api_Neovim与VSCode集成使用教程_Neovim VSCode扩展配置

Neovim是 Vim 的一个分支,具有更大的可扩展性和集成性。该扩展使用完全嵌入的 Neovim 实例,不再是半完整的 Vim 模拟! VSCode 的本机功能用于插入模式和编辑器命令,从而充分利用这两种编辑器。

安装如果您想从 WSL 使用 Neovim,请设置useWSL配置切换并指定 nvim 二进制文件的 Linux 路径。为此需要wsl.exeWindows 二进制文件和Linux 二进制文件。必须通过Linux 环境设置可用。用于检查正确的默认 Linux 发行版。wslpathwslpath$PATHwsl –list分配亲和力值以提高性能。Neovim 配置

由于许多 Vim 插件可能会导致 VSCode 出现问题,因此建议从空的init.vim.有关支持哪些类型的插件的指南,请参阅故障排除。

在 Github 上创建问题之前,请确保您可以使用空init.vim且无 VSCode 扩展来重现问题。

要确定 Neovim 是否在 VSCode 中运行lua api,请添加到您的init.vim:

if exists('g:vscode')
    " VSCode extension
else
    " ordinary Neovim
endif

在lua中:

if vim.g.vscode then
    -- VSCode extension
else
    -- ordinary Neovim
end

要有条件地激活插件,vim-plug有 一些解决方案。packer.nvim并lazy.nvim 内置对cond = vim.g.vscode.有关配置 Vim 插件的提示,请参阅 wiki 中的插件。

VSCode 配置 提示和功能VSCode 具体差异故障排除其他扩展

如果您遇到任何性能问题(通常是光标抖动),请确保您没有使用这些类型的扩展:

如果您不确定,请禁用所有其他扩展,重新加载 VSCode 窗口,并在报告之前查看问题是否仍然存在。

复合退出键

由于 VSCode 负责插入模式,因此自定义插入模式 Vim 映射不起作用。要映射复合转义键,请放入 keybindings.json 中:

为了jj

{
    "command": "vscode-neovim.compositeEscape1",
    "key": "j",
    "when": "neovim.mode == insert && editorTextFocus",
    "args": "j"
}

要启用jk还添加:

{
    "command": "vscode-neovim.compositeEscape2",
    "key": "k",
    "when": "neovim.mode == insert && editorTextFocus",
    "args": "k"
}

目前lua api,无法同时映射jk和kj,或者在jk不映射 的情况下进行映射jj。

跳转列表

使用 VSCode 的跳转列表而不是 Neovim 的。这是为了使 VSCode 原生导航(鼠标单击、跳转到定义等)可通过跳转列表进行导航。

如果您使用自定义映射最便宜 OpenAI api key,请确保绑定到

workbench.action.navigateBack/ 。

workbench.action.navigateForward标记(大写和小写)应该可以正常工作。

命令菜单具有类型上的通配菜单补全。 1.5 秒后出现补全选项(以免在您写入:w或时打扰您:noh)。Up/Down选择该选项并Tab接受它。看动图:

lua api_Neovim VSCode扩展配置_Neovim与VSCode集成使用教程

多个光标

多个游标适用于:

插入模式视线模式视觉块模式

要从视线/块模式生成多个光标,请键入ma/mA或mi/ mI (默认情况下)。效果不同:

查看实际操作中的 gif:

Neovim与VSCode集成使用教程_lua api_Neovim VSCode扩展配置

内置的多光标支持可能无法满足您的需求。更多多光标功能请参考插件 vscode-multi-cursor.nvim

️ API

加载模块:

local vscode = require('vscode-neovim')

vscode.action():异步执行vscode命令。vscode.call():同步执行vscode命令。vscode.on():定义一些 Nvim UI 事件的处理程序。vscode.has_config():检查 vscode 设置是否存在。vscode.get_config():获取vscode设置值。vscode.update_config():设置 vscode 设置。vscode.notify():显示 vscode 消息(另请参阅 Nvim 的vim.notify)。vscode.to_op(): 的帮手map-operator。使用方法见code_actions.luavscode.get_status_item:获取 vscode 状态栏项。可以分配属性,这会神奇地更新状态栏项目。g:vscode_clipboard:使用 VSCode 剪贴板 API 的剪贴板提供程序。在 WSL 中时默认使用。请参阅 :h g:clipboard了解更多详情。用法:let g:clipboard = g:vscode_clipboardvscode.eval():在vscode中同步计算javascript并返回结果vscode.eval_async():在 vscode 中异步评估 javascriptvscode.action(名称免费的大模型api,选项)

异步执行 vscode 命令。请参阅示例。

参数:

vscode.call(名称、选项、超时)

同步执行 vscode 命令。请参阅示例。

参数:

返回:操作的结果

例子

目前,提供了两个内置操作用于测试目的:

_ping回报”pong”_wait等待指定的毫秒数然后返回”ok”

do -- Execute _ping asynchronously and print the result
  vscode.action("_ping", {
    callback = function(err, res)
      if err == nil then
        print(res) -- outputs: pong
      end
    end,
  })
end
-- Format current document
vscode.action("editor.action.formatDocument")
do -- Comment the three lines below the cursor
  local curr_line = vim.fn.line(".") - 1  -- 0-indexed
  vscode.action("editor.action.commentLine", {
    range = { curr_line + 1, curr_line + 3 },
  })
end
do -- Comment the previous line
  local curr_line = vim.fn.line(".") - 1 -- 0-indexed
  local prev_line = curr_line - 1
  if prev_line >= 0 then
    vscode.action("editor.action.commentLine", {
      range = { prev_line , prev_line },
    })
  end
end
do -- Find in files for word under cursor
  vscode.action("workbench.action.findInFiles", {
    args = { query = vim.fn.expand('') }
  })
end
-- Execute _ping synchronously and print the result
print(vscode.call("_ping")) -- outputs: pong
-- Wait for 1 second and print the return value 'ok'
print(vscode.call("_wait", { args = { 1000 } })) -- outputs: ok
-- Wait for 2 seconds with a timeout of 1 second
print(vscode.call("_wait", { args = { 2000 } }), 1000)
-- error: Call '_wait' timed out

vscode.on(事件,回调)

目前没有可供用户使用的可用事件。

Neovim VSCode扩展配置_Neovim与VSCode集成使用教程_lua api

VSCode 设置vscode.has_config(名称)

检查配置是否具有特定值。

参数:

返回:

vscode.get_config(名称)

获取配置值。

参数:

返回:

vscode.update_config(名称,值,目标)

更新配置值。

参数:

例子:

------------------
--- has_config ---
------------------
-- Check if the configuration "not.exist" exists
print(vscode.has_config("not.exist"))
-- Should return: false
-- Check multiple configurations
vim.print(vscode.has_config({ "not.exist", "existing.config" }))
-- Should return: { false, true }
------------------
--- get_config ---
------------------
-- Get the value of "editor.tabSize"
print(vscode.get_config("editor.tabSize")) -- a number
-- Get multiple configurations
vim.print(vscode.get_config({ "editor.fontFamily", "editor.tabSize" }))
-- Should return: { "the font family", "the editor tabSizse" }
---------------------
--- update_config ---
---------------------
-- Update the value of "editor.tabSize"
vscode.update_config("editor.tabSize", 16, "global")
-- Update multiple configurations
vscode.update_config({ "editor.fontFamily", "editor.tabSize" }, { "Fira Code", 14 })

留言vscode.notify(消息)

显示 vscode 通知

您可以设置vscode.notify为默认通知功能。

vim.notify = vscode.notify

vscode.get_status_item(id)

创建状态项

local test = vscode.get_status_item('test')
test.text = 'hello' -- Show the text
test.text = '' -- Hide the item
test.text = nil -- Close the item
test.text = '' -- error: The status item "test" has been closed

vscode.eval(代码

, opts, 超时

在 vscode 中评估 javascript 并返回结果。该代码在异步函数上下文中执行(因此await 可以使用)。使用return语句将值返回给 lua。从 lua 传递的参数可用作 args变量。评估的代码可以通过全局访问 VSCode APIvscode。

尖端:

参数:

返回:

例子:

local current_file = vscode.eval("return vscode.window.activeTextEditor.document.fileName")
local current_tab_is_pinned = vscode.eval("return vscode.window.tabGroups.activeTabGroup.activeTab.isPinned")
vscode.eval("await vscode.env.clipboard.writeText(args.text)", { args = { text = "some text" } })

vscode.eval_async(代码)

类似vscode.eval()音乐api调用,但会立即返回并在后台进行评估。

参数:

Vim脚本

注意:从 1.0.0 开始,vimscript 函数已被弃用。请改用Lua api。

️ 键绑定(快捷键)

可用于文件/滚动/窗口/选项卡管理的默认命令和绑定:

“With bang”是指加一个“!”到命令的结尾。

键绑定帮助

本文档仅提到一些特殊情况,并不是按键绑定和命令的详尽列表。使用 VSCode 和 Nvim 功能查看文档和所有定义的快捷方式:

添加按键绑定

每个特殊(control/alt)键盘快捷键都必须在 VSCode 中显式定义才能发送到 neovim。默认情况下,仅发送 Neovim 默认包含的绑定。

要将自定义绑定传递给 Neovim(例如C-h在正常模式下),请添加到 keybindings.json:

{
    "command": "vscode-neovim.send",
    // the key sequence to activate the binding
    "key": "ctrl+h",
    // don't activate during insert mode
    "when": "editorTextFocus && neovim.mode != insert",
    // the input to send to Neovim
    "args": ""
}

禁用键绑定

切换键绑定有三种配置:

ctrlKeysForInsertMode:切换 ctrl 键进入插入模式。ctrlKeysForNormalMode:切换 ctrl 键为正常模式。editorLangIdExclusions:在某些文件类型中禁用此扩展定义的键绑定。请注意,这不会影响所有键绑定。

如果您发现这些选项不起作用,您可以手动修改 VSCode 中的键绑定(见下文)。

删除按键绑定代码导航

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

editor.action.revealDefinition

也适用于 vim 帮助。

gf

Neovim VSCode扩展配置_lua api_Neovim与VSCode集成使用教程

editor.action.revealDeclaration

gH

editor.action.referenceSearch.trigger

gO

workbench.action.gotoSymbol

C-w gd/C-w gf

editor.action.revealDefinitionAside

gD

editor.action.peekDefinition

gF

editor.action.peekDeclaration

Tab

togglePeekWidgetFocus

在查看编辑器和参考列表之间切换。

C-n/C-p

导航列表、参数提示、建议、快速打开、命令行历史记录、查看参考列表

要指定默认的查看模式,请

editor.peekWidgetDefaultFocus在您的设置中进行修改。

资源管理器/列表导航

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

资源管理器文件操作

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

悬停小部件操作

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

默认设置以下键绑定: 当悬停不可见时,将 K 发送到 nvim(show hoover);当悬停可见时,再次按 K 聚焦悬停小部件。

{
    "command": "editor.action.showHover",
    "key": "shift+k",
    "when": "neovim.init && neovim.mode == normal && editorTextFocus && editorHoverVisible"
}

文件管理

该扩展将各种 Nvim 命令(:edit、:enew、:find、:write、:saveas、:wall、:quit等)别名为等效的 vscode 命令。还有它们的正常模式等效项(如果适用)C-w q,例如 等。

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

标签管理

该扩展将各种 Nvim tab 命令(:tabedit, :tabnew, :tabfind, :tabclose, :tabnext, :tabprevious, :tabfirst, :tablast)别名为等效的 vscode 命令。还有它们的正常模式等效项(如果适用)gt,例如 等。

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

缓冲区/窗口管理

该扩展将各种 Nvim 缓冲区/窗口命令 ( :split、:vsplit、:new、:vnew、:only) 别名为等效的 vscode 命令。还有它们的正常模式等效项(如果适用)C-w s,例如 等。

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

分割尺寸分布由设置控制

workbench.editor.splitSizing。默认情况下,它是distribute,等于 vim 的equalalways和eadirection = 'both'(默认)。

要使用 VSCode 命令“增加/减少当前视图大小”而不是单独的宽度和高度绑定:

将其复制到 init.vim 中

插入模式特殊键

启用者ctrlKeysForInsertMode

默认:

“a”, “d”, “h”, “j”, “m”, “o”, “r”, “t”, “u”, “w”

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

普通模式控制键

启用者ctrlKeysForNormalMode

默认:

“a”, “b”, “d”, “e”, “f”, “h”, “i”, “j”, “k”, “l”, “m”, “o”, “r”, “t”, “u”, “v”, “w”, “x”, “y”, “z”, “/”, “

请参阅键绑定帮助查看所有定义的快捷方式及其文档。

© 版权声明
广告也精彩

相关文章

广告也精彩

暂无评论

none
暂无评论...