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
, 搜索pushName
cgn
, 删除并替换pushName为''getName
, 输入
上面三步是一个一组方法,此时我们在使用 .
逗号, 就可以重复一遍. 一个.
逗号就重复一次.
可以一定程度的替换多光标的操作.