Vscode vim 使用中文版说明

您所在的位置:网站首页 vim使用说明 Vscode vim 使用中文版说明

Vscode vim 使用中文版说明

2023-10-07 12:43| 来源: 网络整理| 查看: 265

译者注:本中文版基于 VSCodeVim/Vim 的 README.md(2022-04-26)进行翻译和更新,基础英文版本保存在 The_original_En_version 下,如果后续有更新,将以最新版本与该版本比对后,再进行差异翻译。

VSCodeVim 是一个适用 Visual Studio Code 于 Vim 模拟器。

🚚 查看所有已支持的 Vim 功能,请参考我们的 roadmap 📃 我们的 change log 概括了在两次发布之间突破性的/主要的/次要的更新 ❓ 如果您想询问任何问题,在 Slack 加入我们 在 GitHub 报告缺少的功能/Bug 目录 (单击展开) 💾 安装 Mac Windows ⚙️ 设置 简单示例 VSCodeVim 设置 Neovim 集成 Key映射 "vim.insertModeKeyBindings"/"vim.normalModeKeyBindings"/"vim.visualModeKeyBindings"/"vim.operatorPendingModeKeyBindings" "vim.insertModeKeyBindingsNonRecursive"/"normalModeKeyBindingsNonRecursive"/"visualModeKeyBindingsNonRecursive"/"operatorPendingModeKeyBindingsNonRecursive" Debugging 映射 映射更复杂的Key组合 Vim 模式 Vim 设置 .vimrc支持 🖱️ 多光标模式 🔌 被模拟的插件 vim-airline vim-easymotion vim-surround vim-commentary vim-indent-object vim-sneak CamelCaseMotion Input Method ReplaceWithRegister vim-textobj-entire vim-textobj-arguments 🎩 VSCodeVim 小技巧! 📚 F.A.Q. ❤️ 贡献 特别鸣谢 💾 安装

VSCodeVim 在 安装 和重载 VS Code 后会自动启动。

Windows

像真正的 Vim 一样, VSCode 中文Vim 将接管您的 Ctrl 键行为。这个行为可以使用 useCtrlKeys 和 handleKeys 设置进行修改。

⚙️ 设置

此处描述的设置只是受支持设置的一部分;完整的设置列表在 VSCodeVim 的扩展详情页的 Contributions 选项卡中(选项卡可以在 VS Code 扩展视图可以找到)。

简单示例

下面是一个关于 VSCodeVim 的 settings.json 配置文件的示例:

{ "vim.easymotion": true, "vim.incsearch": true, "vim.useSystemClipboard": true, "vim.useCtrlKeys": true, "vim.hlsearch": true, "vim.insertModeKeyBindings": [ { "before": ["j", "j"], "after": [""] } ], "vim.normalModeKeyBindingsNonRecursive": [ { "before": ["", "d"], "after": ["d", "d"] }, { "before": [""], "commands": [":nohl"] }, { "before": ["K"], "commands": ["lineBreakInsert"], "silent": true } ], "vim. leader": "", "vim. handleKeys": { "": false, "": false } } VSCodeVim 设置

这些设置是 VSCodeVim 的特有设置。

设置 描述 类型 默认值 vim. changeWordIncludesWhitespace 当修改单词时包含尾部相连的空格。这个配置将作用于在 cw 指令以及同级别的 (yw and dw) 指令上,而不是 ce Boolean false vim. cursorStylePerMode.{Mode} 为每个 {模式} 配置不同的光标样式,每个模式都有 默认的光标样式。已经支持的样式有: line, block, underline, line-thin, block-outline, and underline-thin. String None vim. digraphs.{shorthand} 设置自定义的有向图简写,可以覆盖默认的简写。使用两个字符去表示一个有向图和一个或多个 UTF16 代码位。例如: "R!": ["🚀", [55357, 56960]] Object {"R!": ["🚀", [0xD83D, 0xDE80]] vim. debug. silent Boolean indicating whether log messages will be suppressed(译者注:静默输出日志内容?) Boolean false vim. debug. loggingLevelForConsole 在控制台输出的最高日志级别。日志在开发者工具中可见。支持的值有: 'error'、 'warn'、'info'、'verbose'、'debug'。 String error vim. debug. loggingLevelForAlert 在 VSCode 提示框输出的最高日志级别。支持的值有: 'error'、 'warn'、'info'、'verbose'、'debug'。 String error vim. disableExtension 禁用 VSCodeVim 扩展。也可以在命令面板使用 toggleVim 命令切换。 Boolean false vim. handleKeys 被配置的 Key 将由 VSCode 执行,而不是 VSCodeVim 扩展。在 package.json 的 keybindings 集合中的( when 参数含有 vim.use )任何 Key 都可以通过设置 "": false 由 VS Code 执行。例如:使用 ctrl+f 搜索(VS Code 的原生行为): "vim.handleKeys": { "": false }。 String "": true "": false vim. overrideCopy 为了能在 VSCodeVim 中正确执行,我们覆盖 VSCode Copy 命令,如果 cmd-c/ctrl-c 给您带来了麻烦,可以将此值设置为 false 并在这里投诉 Boolean false vim. useSystemClipboard 将系统剪切板寄存器 (*) 作为默认的寄存器 Boolean false vim. searchHighlightColor 当前搜索未匹配的背景色 String findMatchHighlightBackground ThemeColor(主题颜色) vim. searchHighlightTextColor 当前搜索未匹配的文本色 String None vim. searchMatchColor 当前搜索匹配的背景色 String findMatchBackground ThemeColor(主题颜色) vim. searchMatchTextColor 当前搜索匹配的文本色 String None vim. substitutionColor 当 vim.inccommand 设置为 enable 时,替换文本的背景色 String " #50f01080 " vim. substitutionTextColor 当 vim.inccommand 设置为 enable 时,替换文本的文本色 String None vim. startInInsertMode 以 Insert 模式启动,而不是 Normal 模式(VSCode 启动时的默认模式) Boolean false vim. useCtrlKeys 使用 Vim 的 Ctrl 键行为代替 VSCode 的行为,例如复制、粘贴、查找、等等 Boolean true vim. visualstar 在 Visual 模式下,使用 * 或 # 搜索当前光标所在词 Boolean false vim. highlightedyank. enable 当复制时高亮内容 Boolean false vim. highlightedyank. color 设置复制时高亮的颜色 String rgba (250, 240, 170, 0.5) vim. highlightedyank. duration 设置复制时高亮的高亮的持续时长(译者注:毫秒) Number 200 Neovim 集成

⚠️ 实验性功能。请在这里留下您关于 Neovim 集成的问题

使用 neovim 执行 Ex 命令

安装 neovim 修改下面的配置: 设置 描述 类型 默认值 vim. enableNeovim 允许 Neovim Boolean false vim. neovimPath neovim 可执行文件的绝对路径。如果未设置,则会自动从环境变量查找 neovim 的路径。 String vim. neovimUseConfigFile 如果设置为 true,Neovim 会从 vim.neovimConfigPath 指定的位置加载配置文件。如果您想使用 Neovim 上的扩展,则这个配置是必须为 true Boolean false vim. neovimConfigPath Neovim 配置文件的路径。如果未设置,Neovim 将搜索它的默认配置文件路径 String

以下是关于集成 neovim 的一些技巧:

g命令 :normal 命令 快速查找与替换! Key 映射

自定义的映射只会在相对应的模式下生效的。

"vim.insertModeKeyBindings" / "vim.normalModeKeyBindings" / "vim.visualModeKeyBindings" / "vim.operatorPendingModeKeyBindings" Key 映射(译者注:默认是循环 Key 映射)可用于 Insert、Normal、Operator Pending and Visual 模式。 Key 绑定可能会包含 "before", "after", "commands" 和 "silent"。 在插入模式下,绑定 jj 为 (译者注:按下 jj 相当于按下 的效果): "vim.insertModeKeyBindings": [ { "before": ["j", "j"], "after": [""] } ] 绑定 £ 为当前光标的前一个完整单词: "vim.normalModeKeyBindings": [ { "before": ["£"], "after": ["#"] } ] 绑定 : 为打开命令面板,和在状态栏不显示消息: "vim.normalModeKeyBindings": [ { "before": [":"], "commands": [ "workbench.action.showCommands", ], "silent": true } ] 绑定 m 为添加书签,和绑定 b 为打开书签列表 (在使用了 Bookmarks 插件的提前下): "vim.normalModeKeyBindings": [ { "before": ["", "m"], "commands": [ "bookmarks.toggle" ] }, { "before": ["", "b"], "commands": [ "bookmarks. list" ] } ] 绑定 ctrl+n 为关闭搜索高亮,和绑定 w 为保存当前文件: "vim.normalModeKeyBindings": [ { "before":[""], "commands": [ ":nohl", ] }, { "before": ["leader", "w"], "commands": [ "workbench.action.files.save", ] } ] 在 Operator Pending 模式下绑定 { 为 w ,使 y{ 和 d{ 各自像 yw 和 dw 一样工作: "vim.operatorPendingModeKeyBindings": [ { "before": ["{"], "after": ["w"] } ] 在 Operator Pending 模式下绑定 L 为 $ 和绑定 H 为 ^,使 yL 和 dH 各自像 y$ 和 d^ 一样工作: "vim.operatorPendingModeKeyBindings": [ { "before": ["L"], "after": ["$"] }, { "before": ["H"], "after": ["^"] } ] 在 Visual 模式下,绑定 > 和 也是可用的。 不同之处在于搜索的字符数。 例如, 2s 需要 2 个字符,并按这 2 个字符搜索。

这个映射不是标准的映射,因此建议您使用自定义的映射。

vim-surround

基于 surround.vim,这个插件用于处理范围字符,例如圆括号、方括号、引号和 XML 标签。

配置 描述 类型 默认值 vim. surround 允许/禁用 vim-surround Boolean true

使用 t 或 来完成 tag 的更改,并保留所有已存在的属性。

范围命令 描述 y s 为 选中的区域添加 desired 范围字符 d s 删除 范围字符 c s 把 existing 范围字符改成 desired 范围字符 S 在 Visual 模式下给选中区域添加范围字符

示例:

"test" ,将光标移至引号内,输入 cs"' 后会变成 'test' "test" 将光标移至引号内,输入 ds" 后会变成 test "test" 将光标移至引号内,输入 cs"t 然后再输入 123> 后会变成 test vim-commentary

类似于 vim-commentary,但使用了 VS Code 原生的 Toggle Line Comment 和 Toggle Block Comment 功能。

示例:

gc - 切换行注释。例如 gcc(取消)当前行注释,gc2j(取消)当前行和下一行注释。 gC - 切换块注释。例如 gCi 用括号注释选中区域。 vim-indent-object

基于 vim-indent-object,它允许将处于同一缩进级别的代码块当做一个文本对象。对于不需要使用大括号的语言中非常有用(例如:Python)。

前提是在括号和 tag 的开头和结尾之间有一个新行,它可以被认为是一个不可知论的 cib / ci{ / ci[ / cit。(译者注:不是很理解)

命令 描述 ii 当前行缩进级别 ai 当前行缩进级别和上一行(想想 Python 中的 if 语句) aI 当前行缩进级别,上一行和下一行(想想 C/C++/Java/etc 中的 if 语句) vim-sneak

基于 vim-sneak,它允许由两个字符指定的任何位置。

配置 描述 类型 默认值 vim. sneak 开启/禁用 vim-sneak Boolean false vim. sneakUseIgnorecaseAndSmartcase 当使用 sneaking 时,遵守 vim.ignorecase 和 vim.smartcase Boolean false

一旦 sneak 被激活,可以使用以下命令发起移动指令,对于操作键,sneak 使用 z 代替了 s,因为 s 已经被 surround 插件占用。

移动命令 描述 s 向前移动到 第一次出现的位置 S 向后移动到 第一次出现的位置 z 向前执行 第一次出现 的位置 Z 向后执行 第一次出现 的位置 CamelCaseMotion

基于 CamelCaseMotion,但不是完全的模糊。这个插件提供了一种更简单的方法来移动 camelCase 和 snake_case 单词

配置 描述 类型 默认值 vim. camelCaseMotion. enable 启用/禁用 CamelCaseMotion Boolean false

一旦 CamelCaseMotion 被启用,以下命令是可以使用的:

Motion Command Description w 向前移动到下一个 camelCase 或 snake_case 词段的开头 e 向前移动到下一个 camelCase 或 snake_case 词段的结尾 b 向后移动到下一个 camelCase 或 snake_case 词段的开头 iw 选择/修改/删除/等当前的 camelCase or snake_case 词段

默认情况下, 被映射到 \,因此例如,d2i\w 将删除当前和下一个驼峰字母词段。

Input Method

退出 Insert 模式时禁用输入法

配置 描述 vim.autoSwitchInputMethod.enable 一个布尔值,表示 autoSwitchInputMethod 是开还是关 vim.autoSwitchInputMethod.defaultIM 默认输入法 vim.autoSwitchInputMethod.obtainIMCmd 检索当前输入法键值的命令的完整路径 vim.autoSwitchInputMethod.switchIMCmd 切换输入法命令的完整路径,使用 {im} 作为输入法键值的占位符

任何第三方程序都可以用来切换输入法。下面将介绍如何配置 im-select :

安装 im-select (查看 安装向导)

查找你默认输入法的键值

Mac:

将你的输入法切换为英文,并在你的终端中运行以下命令://im-select ,之后将输出您的当前输入法的键值。下表列出了 MacOS 常用的英文键布局。

键值 描述 com. apple. keylayout. US U.S. com. apple. keylayout. ABC ABC com. apple. keylayout. British British com. apple. keylayout. Irish Irish com. apple. keylayout. Australian Australian com. apple. keylayout. Dvorak Dvorak com. apple. keylayout. Colemak Colemak

Windows:

关于如何查看您的输入法键值请查看 im-select向导 。通常,如果您的键盘布局是 en_US,那么输入法键值是 1033 (en_US 键盘布局的 locale ID)。您也可以从这个页面找到您的 locale ID,其中 LCID Decimal 列是 locale ID。

配置 vim.autoSwitchInputMethod.

MacOS:

假设给出了 com.apple.keylayout.US 的输入法键值,和 im-select 的本地路径是 /usr/local/bin,那么配置下:

"vim.autoSwitchInputMethod.enable": true, "vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.US", "vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select", "vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}"

Windows:

假设给出了 1033 (en_US) 的输入法键值,和 im-select.exe 的本地路径是 D:/bin,那么配置如下:

"vim.autoSwitchInputMethod.enable": true, "vim.autoSwitchInputMethod.defaultIM": "1033", "vim.autoSwitchInputMethod.obtainIMCmd": "D:\\bin\\im-select.exe", "vim.autoSwitchInputMethod.switchIMCmd": "D:\\bin\\im-select.exe {im}"

上面的 {im} 参数是的一个命令行选项,将被传递给 im-select 用于切换输入法。如果使用替代程序来切换输入方法,应该在配置中添加类似的选项。例如,如果程序使用的是 my-program -s imKey 来切换输入法,那么 vim.autoSwitchInputMethod.switchIMCmd 应该是 /path/to/my-program -s {im}

ReplaceWithRegister

基于 ReplaceWithRegister,用寄存器的内容替换现有文本的一种简单方法。

配置 描述 类型 默认值 vim. replaceWithRegister Enable/disable ReplaceWithRegister Boolean false

一旦激活,输入 gr (全称“go replace”),然后输入一个动作,来描述您想要使用寄存器内容替换的文本。

移动命令 描述 [count]["a]gr 移动所描述的文本,替换为指定寄存器的内容 [count]["a]grr [count]行或当前行,替换为指定寄存器的内容 {Visual}["a]gr 所选内容,替换为指定寄存器的内容 vim-textobj-entire

和 vim-textobj-entire 相似

添加两个有用的文本对象:

ae 代表了 buffer 的全部内容 ie 代表了 buffer 区不包含开关和结尾空格的全部内容

使用示例:

dae - 删除整个 buffer 区内容 yie - 复制 buffer 区不包含开头和结尾空格的全部内容 gUae - 将 buffer 区全部内容转换为大写 vim-textobj-arguments

类似于在 targets.vim 中的参数文本对象。在大多数编程语言中,对于处理函数内部参数,使用它会变的非常简单。

移动命令 描述 ia 不包含分隔符的参数 aa 包含分隔符的参数

使用示例:

cia - 更改光标下的参数,同时保留 , 分隔符 daa - 删除光标下的所有参数,包含分隔符(如果存在的话) 配置 描述 类型 默认值 vim. argumentObjectOpeningDelimiters 开始分隔符的列表 String list [" (", "["] vim. argumentObjectClosingDelimiters 结束分隔符的列表 String list [")", "]"] vim. argumentObjectSeparators 对象分隔符列表 String list [","] 🎩 VSCodeVim 小技巧!

VSCode 有很多实用的技巧,我们试着保留其中的一些:

gd - 跳转至定义处 gq - 对选中的文本块进行换行,保持注释风格。非常适合格式化文档注释 gb - 定位与当前光标下单词相同的在下一个位置处,并添加光标 af - Visual 模式下的命令,用于选择更大范围内的文本块。例如,有一段 blah (foo [bar 'baz']),按下 af 后首先会选中 baz,再次按下会选中 [bar 'baz'],第三次按下会选中 (foo [bar 'baz']) gh - 相当于将鼠标悬停在光标所在的位置。方便查看类型和错误消息,无需使用鼠标! 📚 F.A.Q.

Q:Visual Studio Code 原生的 ctrl 命令没有生效(例如:ctrl+f, ctrl+v)

A:设置 useCtrlKeys 配置 为 false

Q:移动 j / k 到折线上面,将打开和关闭折线内容

A:试着把 vim.foldfix 为 true,这是一处修改;它正常工作,但是有副作用(查看 issue#22276)

Q:替换键不能用了

A:你是用 Mac 吗?您可以先看看我们的 mac-setup 介绍

Q:有烦人的提示/通知/弹窗,我不能使用 关闭!或者我在某些情况下我们关闭弹窗

A:按 shift+ 去关闭所有的弹窗

Q:在 Zen 模式下或状态栏被禁用下,我如何使用命令行?

A:这个扩展允许重新映射命令以显示 VSCode 风格的快选版本,但此功能有很多限制。可以在 VSCode 的 keybindings. json 文件中增加以下内容:

{ "key": "shift+;", "command": "vim.showQuickpickCmdLine", "when": "editorTextFocus && vim.mode != 'Insert'" }

或者仅在 Zen 模式下:

{ "key": "shift+;", "command": "vim.showQuickpickCmdLine", "when": "inZenMode && vim.mode != 'Insert'" }

Q:如何使用换行功能移动光标?

A:如果你设置了单词自动换行,并且当使用j, k, ↓ 或 ↑时希望光标进入每个自动换行的行里,在 VSCode 的 keybindings. json 文件中添加以下内容:

{ "key": "up", "command": "cursorUp", "when": "editorTextFocus && vim.active && !inDebugRepl && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible" }, { "key": "down", "command": "cursorDown", "when": "editorTextFocus && vim.active && !inDebugRepl && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible" }, { "key": "k", "command": "cursorUp", "when": "editorTextFocus && vim.active && !inDebugRepl && vim.mode == 'Normal' && !suggestWidgetMultipleSuggestions && !suggestWidgetVisible" }, { "key": "j", "command": "cursorDown", "when": "editorTextFocus && vim. active && ! inDebugRepl && vim. mode == 'Normal' && ! suggestWidgetMultipleSuggestions && ! suggestWidgetVisible" }

警告: 此解决方案将恢复 VSCode 中 j 和 k 的默认行为,所以像 10j 将不起作用。如果您需要这些移动指令起作用,您还有其他性能较差的选择。

我用 setxkbmap 交换了 Escape 和 Caps Lock 按键,但在 VSCodeVim 中不起作用

这是一个在 VSCode 中已知的问题,在一个工作区中,您可以设置 "keyboard.dispatch": "keyCode" 然后重启 VSCode。

❤️ 贡献

这个项目是由一组了不起的人在维护,非常欢迎您贡献爱心。如果您也想参与进来,可以查看贡献向导

Buy Us A Coffee

特别鸣谢: 感谢 @xconverge 提交了 100 多次代码。如果您发现您最讨厌的 bug 悄悄消失了,很可能是他修复的。 感谢 @Metamist 实现的 EasyMotion ! 感谢 @sectioneight 实现的文本对象! 强大的工具 Kevin Coleman,创造我们的 LOGO! 向 @chillee (又名 Horace He) 致敬,感谢他的贡献和辛勤工作。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3