如何用好vscode vim模式?
发布于 5 天前 作者 chapgaga 572 次浏览 最后一次编辑是 1 天前 来自 问答

启用vim模式后,Ctrl+w不能用,只能用:q 一时间不适应 dd行后,通过u取消更改,恢复原状了,可是文件的dirty位竟然还在,这有点误导人啊

Ctrl+O无法使用,用什么替代方法呢?

槽点,优点,欢迎大家都来评论:)

按键冲突问题

a1. vscodevim u是undo,redo是什么按键。 Ctrl+r按键冲突,不能redo a2. ctrl+d 字符匹配,vim模式下无法使用

其他问题

b1. v 选中 yy复制内容,无法在其他编辑器,通过Ctrl+v粘贴

找到解法的朋友,可以针对每个问题id,说出你的解决办法

31 回复

emmmm我也是在VSCode里用Vim插件的,不过感觉Mac下没有这么多按键冲突,所以非常的愉快

vscode 配置

  "vim.useCtrlKeys": true,
  "vim.hlsearch": true,
  "vim.insertModeKeyBindings": [
    {
      "before": [
        "j",
        "j"
      ],
      "after": [
        "<Esc>"
      ]
    }
  ],
  "vim.normalModeKeyBindingsNonRecursive": [
    {
      "before": [
        "<leader>",
        "c",
        "c"
      ],
      "after": [
        "g",
        "c"
      ]
    },
    {
      "before": [
        "<C-n>"
      ],
      "after": [],
      "commands": [
        {
          "command": ":nohl"
        }
      ]
    },
    {
      "before": [
        "Z",
        "Z"
      ],
      "after": [],
      "commands": [
        {
          "command": "workbench.action.files.save",
          "args": []
        },
        {
          "command": "workbench.action.closeActiveEditor",
          "args": []
        }
      ]
    },
    {
      "before": [
        "Z",
        "Q"
      ],
      "after": [],
      "commands": [
        {
          "command": "workbench.action.files.revert",
          "args": []
        },
        {
          "command": "workbench.action.closeActiveEditor",
          "args": []
        }
      ]
    },
    {
      "before": [
        "leader",
        "w"
      ],
      "after": [],
      "commands": [
        {
          "command": "workbench.action.files.save",
          "args": []
        }
      ]
    }
  ],
  "vim.leader": ",",
  "vim.handleKeys": {
    "<C-a>": false,
    "<C-f>": true,
    "<C-b>": true
  },

ZZ 保存退出, ZW 不保存退出 , <,>W 保存 , jj 退出编辑模式

@waitingsong 你是直接修改worksapce文件么?

@chapgaga 嗯,全局修改。也可以根据项目添加到 .vscode/settings.json 文件

@waitingsong vim设置,每个。vscode配一次,是不是太麻烦?

@chapgaga 所以我修改全局设置

@waitingsong 也是在windows上用vscode?

@waitingsong 用vim模式后,Ctrl+C,Ctrl+V,没法用,真难受啊:( 你怎么解决这个问题?

@chapgaga 是的,windows。 我映射了 ctrl+c ,粘贴用默认的 shift+insert。也挺好的

@waitingsong 按shift+insert,替代ctrl+v,用起来是不是太别扭了:(

Ctrl+c好像不映射,也可以直接用啊

也可以配置vim插件使用全局剪切板,这样 p 就可以直接粘贴内容。 不过我强依赖 TC, 其F4 功能打开文件时会用打开的文件路径覆盖剪切板导致vim中复制的内容也被覆盖了,故我关闭了vim全局剪切板功能。

shift+insert 是 linux 控制台 通用粘贴快捷键。如果你还开着 xshell 之类远程就知道 通用的好处了

@waitingsong Ctrl+C,p和Shift+insert,为何粘贴的内容不同? 你说的TC是什么插件?

Ctrl+c 我是映射在 normal 模式的: vww 然后 Ctrl+c

TC : total commander 。最强大的资源管理器。 用vim,emacs 的不用tc 实在可惜了

TC 只有 win 版本。所以除了 win 其它系统都用不顺手。

既然是在 VSC 里面使用 vim, 其实已经没什么需要配置的了.
毕竟 vim 有跨平台优势在, 保持操作的统一性至关重要, 否则还不如使用代码编辑器. 在使用 vscode vim 和 ideavim 的时候, 我会首选使用 vim shortcuts 来完成编辑器操作.

最重要的配置还是 yank 时使用系统剪贴板. 在首选项中勾选 Vim: Use System Clipboard 即可.

vscode用vim要下插件吗

@waitingsong 按键没有ctrl v方便和顺手啊

@waitingsong 多个workspace如何共享vim配置?每个workspace配置一遍太麻烦了

@waitingsong Ctrl+,就是你说的全局peizhii么?

@chapgaga 是的。 用户设置 打开 settings.json 按钮

@waitingsong 这个就是work space配置,不是全局的,换个work space,又要重新配置的:(

@chapgaga 我不知道你用的啥版本的vsc 2018-09-20_155930.png

@waitingsong 每个work space的配置是独立的,但是不同work space可以共享user setting里面的配置,你说的全局配置应该是user settings

@waitingsong vscodevim u是undo,redo是哪个? Ctrl+r没用:(

不理解为啥要在vscode中用vim,直接vim不行?

不理解为啥要在vscode中用vim,直接vim不行?

@zhulinwei 你直接用VIM么?

我也贴个

	// Remapped keys in insert mode. Allows mapping to vim commands or vscode actions. See README for more.
	"vim.insertModeKeyBindings": [
		{
			"before": ["j", "k"],
			"after": ["<Esc>"]
		}
	],
	// Non-recursive remapped keys in normal mode. Allows mapping to vim commands or vscode actions. See README for more.
	"vim.normalModeKeyBindingsNonRecursive": [
		{
			"before": ["leader", "p"],
			"after": ["\"", "+", "p"]
		},
		{
			"before": ["Z", "Z"],
			"commands": [
				{
					"command": "workbench.action.files.save",
					"args": []
				},
				{
					"command": "workbench.action.closeActiveEditor",
					"args": []
				}
			]
		},
		{
			"before": ["<C-n>"],
			"after": ["g", "b"]
		},
		{
			"before": ["leader", "v", "p"],
			"commands": [
				{
					"command": "workbench.action.splitEditorDown"
				}
			]
		},
		{
			"before": ["leader", "s", "p"],
			"commands": [
				{
					"command": "workbench.action.splitEditorRight"
				}
			]
		}
	],
	"vim.visualModeKeyBindingsNonRecursive": [
		{
			"before": ["leader", "y"],
			"after": ["\"", "+", "y"]
		},
		{
			"before": ["leader", "p"],
			"after": ["\"", "+", "p"]
		},
		{
			"before": ["<C-n>"],
			"after": ["g", "b"]
		}
	]
	```
	,y 赋值选中
	,p 粘贴
	ctrl+n 多光标
	,sp 水平分屏
	,vp 垂直分屏
	jk Esc
	ZZ 保存退出
	还有一些写在vscode的keybind里面, 挑几个
	```
		{
		"key": "ctrl+p",
		"command": "selectPrevSuggestion",
		"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
	},
	{
		"key": "ctrl+n",
		"command": "selectNextSuggestion",
		"when": "suggestWidgetMultipleSuggestions && suggestWidgetVisible && textInputFocus"
	},
	{
		"key": "alt+l",
		"command": "workbench.action.focusNextGroup"
	},
	{
		"key": "alt+h",
		"command": "workbench.action.focusPreviousGroup"
	},
	```
	ctrl+n/ctrl+p 和vim一样在补全列表中上下移动
	alt+l/alt+h 在分屏之间切换
回到顶部