Vim入门到精通

115 阅读1分钟

前言

之前一直听说vim开发,效率高,刚好学习记录一下VSCode中的vim使用

安装

vscode插件市场搜索 Vim

image.png

命令行执行(macOS)

defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool false

Cmd+Shift+P输入

>open user settings

按回车配置settings.json

image.png

{  
    "vim.easymotion": true,
    "vim.incsearch": true,
    "vim.useSystemClipboard": true,
    "vim.useCtrlKeys": true,
    "vim.hlsearch": true,
    "vim.insertModeKeyBindings": [
    {
        "before": ["j", "j"],
        "after": ["<Esc>"]
    }
    ],
    "vim.normalModeKeyBindingsNonRecursive": [
    {
        "before": ["<leader>", "d"],
        "after": ["d", "d"]
    },
    {
        "before": ["<C-n>"],
        "commands": [":nohl"]
    },
    {
        "before": ["K"],
        "commands": ["lineBreakInsert"],
        "silent": true
    }
    ],
    "vim.leader": "<space>",
    "vim.handleKeys": {
    "<C-a>": false,
    "<C-f>": false
    },

    "// To improve performance",
    "extensions.experimental.affinity": {
    "vscodevim.vim": 1
    }
}

模式

模式名称进入
普通NORMAL默认
可视VISUALv
插入INSERTi
命令COMMAND:

模式切换

NORMAL => INSERT
操作按键
光标 / i / a
/ I(大写i) / A
下行 / 上行o / O

INSERT => NORMAL
jj(推荐)或者ESC

VISUAL => NORMAL
v

光标移动

image.png

h j k l 一般我们右手食指放在j,对应就是下,右边k上,左右两边分别是h左,l右。这个多加练习自然能熟练

按键操作
w下个单词开头
b上个单词开头
e下个单词结尾
ge上个单词结尾
gg第一行
G最后一行
0行首
^行首开始第一个非空
$行尾
:n跳到第n行
f{char}跳到下个{char}字符所在位置
F{char}跳到上个{char}字符所在位置
t{char}跳到下个{char}字符所在前一位置
T{char}跳到上个{char}字符所在前一位置
;重复上次查找字符操作
,重复上次查找字符反向操作

动作 motion

动作就是你选择怎么去操作,比如有一个字符"aaa",你按d操作符,是触发了删除操作,再按iw 就是删除""里面的单词,就是删除aaa三个字符,得到""

i是inner(内部)的简写,操作不包括符号,a是around(包含)的简写,操作包括符号

按键操作记忆
iw / aw单词内部 / 外部
i( / a( / ib / ab小括号()内 / 外部b代表bracket
i{ / a{ / iB / aB花括号{}内 / 外部b代表Bracket
i" / a"双引号内 / 外部
i' / a'单引号内 / 外部
i< / a<<>内 / 外部
i[ / a[[]内 / 外部
it / athtml标签内 / 外部
is / as句子内 / 外部一般是一大段文字,不包括空格
ip / ap段落内 / 外部一般是一大段文字,包括空格

操作符 operator

NORMAL模式进行

按键操作
d(delete)删除
c(change)修改(删除并进入插入模式)
y(yank)复制
v(visual)选中并进入 VISUAL模式
u(un)取消
e(entire)整个文件

常规操作

按键操作说明
dd删除一行一般双按是操作行
ndd删除n行n是多个
gd跳到方法定义go to definition
gh显示方法定义go to hierarchy
gb多光标模式选中多个修改
gt跳回
gT跳回上方标签页Cmd+Option+左/右 更简单
Cmd+0/1/2编辑跳文件目录/1分屏窗口/2分屏窗口按jk 下上移动 l打开

切换大小写

按键操作补充
~光标字母改变大小写
n~光标开始n个字母改变大小写
g~~改变当前行字母大小写比如 g~$是当前光标到结尾全改变大小写
gUU改变当前行字母大写
guu改变当前行字母小写
gUaw(gUiw)改变光标下单词大写
guaw(guiw)改变光标下单词小写

easymotion模式(插件)

image.png

image.png

leader代表是什么按键触发,比如 space按两下触发 再按 fn 查找(find)下一个n字符,会标红,按对应字母光标跳转过去

image.png

vim-surround(插件)

image.png

比如"abc" 我们按 cs"[ 就是调用 change surround 把 " 变成 [

结果变成 [abc]

settings.json 配置editor跳termnial

{
        "before": ["<leader>", "t"],
        "commands": ["workbench.action.terminal.focus"],
        "silent": true
    }

按 space + t 触发

settings.json 配置跳到下/上一个tab

settings.json 找到 vim.normalModeKeyBindingsNonRecursive

{
        "before": ["t", "p"],
        "commands": [":tabp"]
    },
    {
        "before": ["t", "n"],
        "commands": [":tabn"]
    }

按 tp跳到上一个标签页(previous) tn跳到下一个标签页(next)