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
热键,j
k
替换Esc
使用,仅供参考
1 | { |
vim相关说明
- 模式mode:vim中有四种常用的模式
- normal模式:默认模式,用于移动光标、删除文本等操作;
- insert模式:用于插入文本;
- visual模式:用于选择文本;
- command-line模式:用于执行命令。
- 操作符operator:用于对文本进行操作,例如
d
删除、y
复制、p
粘贴等。 - 动作motion:用于指定操作的范围,例如
h
j
k
l
移动光标、选择文本等。
学习资源
- vim安装后自带的教程vimtutor,在终端执行
vimtutot
即可进入。 - b站视频指尖飞舞:vscode + vim 高效开发
- CS自学指南
- 博客vim入门笔记
vim基本操作
-
模式相关操作
i
进入插入模式, 光标在当前字符前I
进入插入模式,光标在当前行开头a
进入插入模式,光标在当前字符后A
进入插入模式,光标在当前行结尾o
进入插入模式,光标在当前行下方O
进入插入模式,光标在当前行上方Esc
或Ctrl
+[
退出插入模式,进入normal模式,也可用设置的快捷键 (我设置的是j
k
,理由是因为Esc
距离键盘热区较远):
普通模式下进入命令模式,按Esc
退出命令模式:wq
保存并退出:q!
不保存退出:w
保存:q
退出
-
光标移动相关操作
h
j
k
l
← ↓ ↑ →移动光标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 + e
Ctrl + 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!
评论