author: 橘子哥
createTime: 2022-02-10 14:58
modificationDate: 星期四 10日 二月 2022 14:58:17
description: 爱好
category: 程序员
smallClass: 开发工具
key: artitle
前言
学习vim 并不是为了它说宣传的能够提高多高多高的效率.
即使打字速度再慢二分之一 , 工期该延期依旧是要延期.
影响工期的从来都是产品飘忽不定的需求, 或者自己对需求的理解错误, 以及和后台的撕逼.
学习vim 单纯的就是好奇这个名气这么大的编辑方式, 就是想要学习学习, 满足自己的好奇行, 更不用说, 全键盘的操作是那么极客的一种方式.
当然能够熟练使用vim之后,真的能够提高自身编码的效率当然是皆大欢喜的.
虽然我自己已经更换到了neovim,但是一开始接触的人,还是推荐在VSCode或者idea中使用vim的模拟器. 所以下面内容的环境是在VSCode vim中.
B站推荐一个UP主薄涛TV, 推荐理由, 图文解说 + 技术栈也是 js/vue, 前端看着亲切. 相互完全不认识.
一、Vim简单使用教程
1. 基本操作
光标移动
| h | 左移光标 | |
|---|---|---|
| j | 下移光标 | |
| k | 上移光标 | |
| l | 右移光标 | |
| w | 上一次字符 | |
| b | 下一个字符 | |
| $ | 行尾 | |
| 0 | 行首 | |
| H | 页面顶部 | |
| M | 页面中部 | |
| L | 页面底部 | |
| gg | 文件顶部 | |
| G | 文件尾部 | |
| ctrl + e | 滚动窗口下一行 | |
| ctrl + y | 滚动窗口上一行 | |
| ctrl + b | 滚动窗口上一屏 | |
| ctrl + f | 滚动窗口下一屏 | |
| ctrl + d | 滚动窗口上半屏 | |
| ctrl + u | 滚动窗口下半屏幕 |
复制、粘贴、剪切
| yy | 复制当前文本行 | |
|---|---|---|
| nyy | 向下复制n行 | |
| dd | 剪切当前行 | |
| ndd | 向下剪切n行 | |
| p | 粘贴至光标后一个字符 | |
| P | 粘贴至光标位置 | |
| x | 剪切光标后一个字符 | |
| dw | 剪切当前单词 | |
| yw | 复制当前单词 |
可视化模式
| v | 字符选择可视化 | |
|---|---|---|
| V | 模式行选择可视化 | |
| ctrl + v | 模式块选择 | |
| ><= | 右左自动缩进 | |
| v + a + { | 选择最近的花括号里面内容,包括花括号 | |
| v + a + ( | 选择最近的括号里面内容 | |
| v + i + { | 选择最近的花括号里面内容 | |
| ^ + v | 进入多光标操作 |
insert 模式
| a | 当前位置后插入字符 | |
|---|---|---|
| A | 当前行尾插入字符 | |
| o | 当前行新起一行插入字符 | |
| O | 当前行上上一行新起一行插入字符 | |
| i | 当前位置前插入字符 | |
| I | 当前行首插入字符 | |
| s | 删除当前字符,插入字符 | |
| cc | 删除当前哈狗,插入字符 | |
| $c | 当前位置删除当前行之后的内容插入字符 |
其他常用操作
代码缩进(Normal模式)
| 操作 | 作用 |
|---|---|
| shift + > | 向右缩进 |
| shift + < | 向左缩进 |
撤销/取消撤销(Normal模式)
| 操作 | 作用 |
|---|---|
| u | 撤销上一步操作 |
| ctrl + r | 恢复刚刚的撤销 |
起终操作
| 命令 | 操作对象 | 作用 | |
|---|---|---|---|
| c + i | '、"、(、[、{、< | 删除操作对象里面的内容,并将光标放到其中 | |
| d + i | 同上 | 删除操作对象里面的内容 | |
| y + i | 同上 | 复制操作对象里面的内容 | |
| v + i | 同上 | 选中操作对象里面的内容 |
图示截图自B站薄涛TV的指尖飞舞系列, 不懂他是不是原创,但是我是从这位UP上看到的
2. 解决MAC中英文情况下的情况
第一步,安装im-select:
git地址https://github.com/daipeihust/im-select
curl -Ls https://raw.githubusercontent.com/daipeihust/im-select/master/install_mac.sh | sh
有可能会出现错误:
chmod: /usr/local/bin/im-select: No such file or directory
已经很明显了,你没有权限.
chmod 777 /usr/local/bin
给了读写权限之后,再安装就可以解决问题.
第二步, 配置VSCode中的vim配置
{
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.ABC",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}"
}
上面的ABC是可以更换啊,看你当前英文输入是什么类型的,有可能是US.
第三方输入法一般ABC就行,国行笔记也是ABC.
3. 我的VSCode 中vim的配置
{
"editor.tabSize": 2,
// vim
"vim.useSystemClipboard": true,
"vim.foldfix": true,
"vim.smartRelativeLine": true,
"vim.showMarksInGutter": true,
"vim.insertModeKeyBindings": [
{
"before": ["j", "k"],
"after": ["<Esc>"]
},
{
"before": ["<leader>", "f"],
"commands": ["revealInExplorer"]
}
],
"vim.leader": "<space>",
"editor.codeActionsOnSave": {
"source.organizeImports": true // 在保存的时候,自动调整import语句的相关顺序
},
"vim.easymotion": true,
// 解决vim中英文输入切换的问题
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "com.apple.keylayout.ABC",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/local/bin/im-select",
"vim.autoSwitchInputMethod.switchIMCmd": "/usr/local/bin/im-select {im}",
}
4. vim easyMotion 使用教程
配置
{
"vim.easymotion": true,
}
快捷键使用
| 快捷键名称 | 作用 |
|---|---|
| w | 当前光标往下移动 |
| b | 当前光标往上移动 |
| f {chart} | 当前光标往下移动char 字符 |
| s | 当前光标上下移动 |
| j | 当前光标往上移动排 |
| k | 和上面相反 |
进入easyMotion 之后, 按 q 来退出
5. vim-surround
普通模式
| 命令 | 说明 + 示例 | |
|---|---|---|
| ds | 删除括号 | |
| 例 | ds " | "Hello world!" =>Hello world! |
| cs | 替换括号 | |
| 例 | cs "( | "Hello world!" =>(Hello world!) |
| cS | 替换括号,括号内文本做新一行 | |
| 例 | cS "{ | "Hello world!" =>{<br /> Hello world!<br />} |
| ys | 添加括号(配合vim光标移动) | |
| 例 | ys w [ | Hello world! =>[Hello] world! |
| 例 | ys w <em Enter | Hello world! =><em>Hello<em> world! |
| yS | 添加括号,括号内文本做新一行 | |
| 例 | yS w [ | Hello world! =>[<br /> Hello<br />] world! |
| yss | 整行括起来 | |
| 例 | yss ( | Hello world! =>( Hello world! ) |
| ySS | 整行括起来,括号内文本做新一行 | |
| 例 | ySS { | Hello world! =>{<br /> Hello world! <br />} |
| 例 | ySS <div Enter | Hello world! =><div><br /> Hello world! <br /><div> |
| ySs | 与ySs功能相同 |
可视模式
| 命令 | 说明 + 示例 | |
|---|---|---|
| S | 选中的括起来 | |
| 例 | 选中world: S( | Hello world! =>Hello (world)! |
| gS | 选中的括起来,括号内文本做新一行 | |
| 例 | 选中world: gS{ | Hello world! =>Hello {<br /> world<br />}! |
二、其他遇到的问题(会一直纪录更新)
2.1 mac VSCode 无法快速移动的问题
终端下执行命令:
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false
复原:
defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool true
2.2 已经可以连续移动了,但是移动得太慢
首先配置系统设置中的键盘 按键重复,和重复前延迟都调整到最高
到此为止很多人已经觉得很快了.但是我个人觉得还是不够.此时可以配置命令行.
defaults write NSGlobalDomain KeyRepeat -int 1
0 太快了, 1感觉还行.
2.3 批量修改字符串
有下面这样的代码,
function pushName() {
return "蚂蚱升天";
}
pushName();
想要修改pushName函数名为getNmae. 在使用vim之前,很简单,ctrl + f 搜索pushName然后进行替换就可以了.
vim中提供了另外一种可能性.
/pushName, 搜索pushNamecgn, 删除并替换pushName为''getName, 输入
上面三步是一个一组方法,此时我们在使用 . 逗号, 就可以重复一遍. 一个. 逗号就重复一次.
可以一定程度的替换多光标的操作.