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)