Vscode x vim,实现高效开发
| 目录跳转 |
|---|
| 1. vim简要介绍 |
| 2. 为什么是vim |
| 3. vim插件下载及配置 |
| 4. vim相关说明 |
| 5. vim基本操作 |
| 6. easymotion模式 |
| 7. vim-surround插件easymotion模式 |
前言:关于vim,你需要知道的
vim简要介绍
- vim 是一款经典的文本编辑器,最初是 Unix 系统上的一个工具,现在所有的类 Unix 系统(Linux、Mac)都安装了vim。它具有强大的文本编辑功能,可直接通过终端操作文本。
- vim 是一个高度可定制的编辑器,我们可以通过修改配置文件来适应自己的使用习惯和需求。它支持多种编程语言和文件格式,可以方便地进行代码编辑和调试,有效
使自己看上去更像一个CS人提升开发效率。 - vim 是一个开源软件,可以在多种操作系统上运行,包括 Linux、Windows、Mac等。它可能是Linux用户最熟悉的软件之一。vim也能通过丰富的插件和扩展进一步增强其功能,也能基于其他编辑器(如Vscode)内的Vim插件辅助开发。
为什么是vim
- vim 是一款轻量级的编辑器,不需要图形界面,可以在终端中运行,适合在服务器上使用。
- vim 能够省略频繁的鼠标操作,在不离开键盘热区的情况下,通过键盘快捷键进行操作,提高开发效率。
- vim 方便学习,它的上下限区别很大,可以满足不同用户的需求,从简单的文本编辑到复杂的代码编辑,都可以通过vim实现。你可以只掌握简单的
i、:wq、dd、ESC便在日常开发中使用,也可以通过更多的快捷键和操作,摆脱鼠标的束缚。
Vscode x vim插件
- 在Vscode中安装Vim插件,可以方便地使用vim的快捷键进行日常开发,提升个人效率。
- 在Vscode中配置vim插件,可以更好地平衡自己的使用习惯和需求,个性化配置vim,提升个人开发体验。
- 很多人认为vim的学习曲线高,学习成本大,需要记忆非常多的快捷键和操作,但是我最近体验下来,实际只需要掌握一些使用频率较高的快捷键,其余的可以自己制作一个速查表方便随时查阅。
vim插件下载及配置

- 直接打开Vscode拓展搜索vim点击安装,Windows用户可以直接使用,Mac用户需要根据拓展说明在命令行执行对应语句。
1 | $ defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false # For VS Code |
- 拷贝拓展说明中的配置文件到Vscode的配置文件中


- 或者拷贝下面的配置文件到settings.json
这是我的个人配置,包含一些更改,比如保留了Vscode的
Ctrl热键,jk替换Esc使用,仅供参考
1 | { |
vim相关说明
- 模式mode:vim中有四种常用的模式
- normal模式:默认模式,用于移动光标、删除文本等操作;
- insert模式:用于插入文本;
- visual模式:用于选择文本;
- command-line模式:用于执行命令。
- 操作符operator:用于对文本进行操作,例如
d删除、y复制、p粘贴等。 - 动作motion:用于指定操作的范围,例如
hjkl移动光标、选择文本等。
学习资源
- vim安装后自带的教程vimtutor,在终端执行
vimtutot即可进入。 - b站视频指尖飞舞:vscode + vim 高效开发
- CS自学指南
- 博客vim入门笔记
vim基本操作
-
模式相关操作
i进入插入模式, 光标在当前字符前I进入插入模式,光标在当前行开头a进入插入模式,光标在当前字符后A进入插入模式,光标在当前行结尾o进入插入模式,光标在当前行下方O进入插入模式,光标在当前行上方Esc或Ctrl+[退出插入模式,进入normal模式,也可用设置的快捷键 (我设置的是jk,理由是因为Esc距离键盘热区较远):普通模式下进入命令模式,按Esc退出命令模式:wq保存并退出:q!不保存退出:w保存:q退出
-
光标移动相关操作
hjkl← ↓ ↑ →移动光标w向后移动一个单词,到下一个单词的开头b向前移动一个单词,到本单词或上一个单词开头e向后移动一个单词,到本单词或下一个单词结尾ge向前移动一个单词,到本单词或上一个单词结尾W向后移动一个单词,到下一个单词的开头,忽略标点符号B向前移动一个单词,到本单词或上一个单词开头,忽略标点符号E向后移动一个单词,到本单词或下一个单词结尾,忽略标点符号gE向前移动一个单词,到本单词或上一个单词结尾,忽略标点符号0移动到当前行开头$移动到当前行结尾^移动到当前行开头第一个非空字符gg移动到文件开头G移动到文件结尾H移动到屏幕顶部M移动到屏幕中间L移动到屏幕底部f 字符光标移动到下一个字符所在位置F 字符光标反向移动到上一个字符所在位置t 字符光标移动到下一个字符之前的位置T 字符光标反向移动到上一个字符之后的位置;重复上一次的f/F/t/T操作,反向重复上一次的f/F/t/T操作%跳转到匹配的括号n跳转到下一个匹配的字符N跳转到上一个匹配的字符Ctrl + d、Ctrl + u或Ctrl + b向下向上翻页Ctrl + eCtrl + y向下向上滚动一行Ctrl + g显示当前行号和文件信息
-
动作motion相关操作(需结合操作符使用)
i表示inner,内部,表示操作对象是字符的内部a表示around,周围,表示操作对象是字符的周围
如
diw删除当前单词,ciw修改当前单词,yiw复制当前单词,viw选择当前单词,也可用i(或ib、i"、i{或iB、it等表示特殊符号包含的内容;而daw删除当前单词及之前的空格,a(或ab、a"、a{或aB、at等表示特殊符号本身及包含的内容
-
操作符operator
d删除deletec修改(删除并进入插入模式)changer替换replacey复制yankp粘贴putu撤销v选择(选中并进入visual模式)~切换当前字母大小写n~切换光标位置开始的n个字母大小写g~切换当前行字母大小写gu切换为小写,后接动作motion,如guu将当前行字母改为小写,guiw将光标所在单词改为小写等gU切换为大写,后接动作motion,如gUU将当前行字母改为大写,guiw将光标所在单词改为大写等>增加缩进<减少缩进=自动缩进
-
其他操作
gd跳转到定义go to definitiongD跳转到全局定义Ctrl o退出定义g h悬浮显示定义g t跳转下一个标签页,n g t跳转到向后第n个标签页g T跳转上一个标签页,n g T跳转到向前第n个标签页Ctrl 0将光标移动到侧边栏Ctrl 1将光标移动到编辑器/将光标移动到组1Space或Enter展开或进入文件夹/打开文件Ctrl n打开组n/将光标移动到组n:noh取消高亮:set number显示行号:set nonumber取消显示行号:set hlsearch高亮搜索结果:set nohlsearch取消高亮搜索结果:set ignorecase忽略大小写
easymotion模式
| Motion Command | Description |
|---|---|
<leader> <leader> s <char> |
搜索指定的字符 |
<leader><leader> f <char> |
向前查找指定的字符 |
<leader><leader> F <char> |
向后查找指定的字符 |
<leader><leader> t <char> |
向前查找直到指定的字符 |
<leader><leader> T <char> |
向后查找直到指定的字符 |
<leader><leader> w |
向前移动到单词的开头 |
<leader><leader> b |
向后移动到单词的开头 |
<leader><leader> l |
匹配单词的开始和结束,驼峰命名法,在 _ 后,在 # 后向前 |
<leader><leader> h |
匹配单词的开始和结束,驼峰命名法,在 _ 后,在 # 后向后 |
<leader><leader> e |
向前移动到单词的结尾 |
<leader><leader> ge |
向后移动到单词的结尾 |
<leader><leader> j |
向前移动到行的开头 |
<leader><leader> k |
向后移动到行的开头 |
<leader><leader> / <char>... <CR> |
搜索n个字符 |
<leader><leader><leader> bdt |
向前移动到指定的字符 |
<leader><leader><leader> bdw |
向前移动到单词的开头 |
<leader><leader><leader> bde |
向前移动到单词的结尾 |
<leader><leader><leader> bdjk |
向前移动到行的开头 |
<leader><leader><leader> j |
JumpToAnywhere 动作;默认行为匹配单词的开始和结束,驼峰命名法,在 _ 后,在 # 后向前 |
- 在Vscode配置文件
settings.json中将<leader>设置为<space>,两次空格进入easymotion模式
1 | "vim.leader": "<space>", |

vim-surround插件

例如,对于下面的代码
1 | printf(hello world); |
在normal模式下,输入ysi(",就可以将hello world用括号括起来,变成
1 | printf("hello world"); |
在normal模式下,输入ds",就可以将"hello world"中的双引号删除,变成
1 | printf(hello world); |
在normal模式下,输入cs"<char>,就可以将"hello world"中的双引号替换成指定的字符,例如<char>为',就可以将双引号替换成单引号,变成
1 | printf('hello world'); |
结语
最后我想说的是,学习vim最需要的不是记忆这些快捷键,而是尝试干掉鼠标。忘记是在哪里看到的一句话,程序员需要做的,就是尽可能减少双手离开键盘的时间。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 theUHO!
评论







![OpenVLA,pi_0,pi_0-fast论文精读 [VLA]](https://gitee.com/TheUHO/blog/raw/master/images/202407212255294.jpg)
![lab6 实验报告 [BUAA-OS]](https://gitee.com/TheUHO/blog/raw/master/images/202409111007685.jpg)