文章目录

  • Vim基础
  • 键映射
  • 模式
  • 光标移动

  • 编辑技巧
  • 常用命令
  • 自带插件
  • 其他


Vim基础

键映射

{
  /* vim */
  "vim.incsearch": true,
  "vim.useSystemClipboard": true,
  // "vim.hlsearch": true, 对/字符串的搜索方式来说,搜索到的结果一直高亮显示,不设置这一项美观些
  "vim.easymotion": true, //  启用vim-easymotion
  "vim.leader": "<space>", //  easymotion中,leader键映射为空格键
  "vim.sneak": true, // 启用vim-sneak
  "vim.insertModeKeyBindings": [
    {
      "before": ["j", "j"],
      "after": ["<Esc>"]
    }
  ],
  "vim.normalModeKeyBindingsNonRecursive": [
    // 到行首^映射为H,到行尾$映射为L
    {
      "before": ["H"],
      "after": ["^"]
    },
    {
      "before": ["L"],
      "after": ["$"]
    },
    // easymotion快速跳转映射,s + <char>
    {
      "before": ["<leader>", "s"],
      "after": ["<leader>", "<leader>", "s"]
    },
    // leader+u/d 代替 Ctrl+u/d 使页面向上/下滚动半屏
    {
      "before": ["leader", "u"],
      "after": ["<C-u>"]
    },
    {
      "before": ["leader", "d"],
      "after": ["<C-d>"]
    },
    // 删到行首/行尾  暂时只能用leader + H/L,若dH/L会删除此处到代码开头/结尾
    {
      "before": ["leader", "H"],
      "after": ["d", "^"]
    },
    {
      "before": ["leader", "L"],
      "after": ["d", "$"]
    }
  ],
  // 可视模式
  "vim.visualModeKeyBindingsNonRecursive": [
    {
      "before": ["H"],
      "after": ["^"]
    },
    {
      "before": ["L"],
      "after": ["$"]
    }
  ],
  "vim.useCtrlKeys": true, //结合下面的"vim.handleKeys"配置
  "vim.handleKeys": {
    "<C-a>": false,
    "<C-f>": false,
    // 带有vim插件的vscode,它的Ctrl+w是由vscode控制,非vim插件扩展快捷键控制。若改为true,则就是了。
    "<C-w>": false
  }
}

模式

普通模式 Normal 插入模式 Insert 可视模式 Visual 命令模式 : 替换模式Replace

vscode vim esc失效_vscode vim esc失效


:若配置了"vim.sneak": true则s与S就不起作用

光标移动

字符

单词


跳转

句和段

h 左

w下一个单词开头

0 行首

f char 跳到char位置

( 到句首

j 下

b本单词或上一个单词开头

^ 行首非空字符

F char 反向

) 到句尾

k 上

e本单词或下一个单词结尾

$ 行尾

t char char前一位置

{ 到段首

l 右

ge上一个单词结尾

gg 首行

T char char后一位置

} 到段尾

W长单词 E长单词 B长单词

G 尾行

; 重复上次的跳转

ngg 第n行

, 反向查找上次的查找

% 移动到与光标所在括号相对应的另一半括号上(对小括号,中括号和大括号有用,尖括号无用):比较的全面,但是看每个人的习惯不同,惯用的就会不同。上述是普通模式和可视模式的光标移动,它们完全一致,由于插入模式下的光标移动快捷键和很多VSCode内置快捷键冲突,这里就不介绍了,在文章末尾有写

方便编辑和阅读代码的操作如下(不仅仅限于光标移动,包含tricks等)

类型1
zt 屏幕滚动使得当前行成为屏幕的最上面一行
zz 中间一行
zb 最下面一行
zc 关闭代码块
zo 打开代码块
za 打开或关闭代码块

类型2
Ctrl + 0:跳转到侧边栏,并可以用jk上下移动,空格打开文件或者文件夹
Ctrl + 2:增加一个工作区栏,以此类推,Ctrl + 1:跳到第一个工作区栏
Ctrl + N:新建文件 Ctrl + Shift + N:新建文件夹(这两个在Settings -> Keyboard Shortcuts -> 搜索explorer.new -> 自定义
l:从侧边栏回到未跳转前的文件工作区,或者新打开的文件工作区
gt(go to tab):跳到下一个标签页
gT(go to tab):跳到上一个标签页
ngt(go to tab):跳到第n个标签页

类型3
gh(go to hover):悬浮查看一些文档,签名
gd(go to destination):跳转到定义声明或具体描述的地方
Ctrl + o:回到跳转之前的地方 Ctrl + i:与之相反
gb:光标置于单词的任意位置,输入一个gb,就选中一相同的单词(想选中4个相同的单词就连续输入gb4次
==:格式化代码
gcc:注释本行代码
gcnj/ngcj:注释从本行和下方n行的代码
gcnk/ngck:注释从本行和上方n行的代码

编辑技巧

操作符opertator 4个

d 剪切(delete)

x 剪切光标所停留的那个字符 X 剪切光标所停留的前一个字符

c 删除并进入插入模式(change)

y 复制(yink)

介词 2个

i 表示里面

a 表示外面

名词 9个

光标移动之字符 h j k l

光标移动之单词 w b e…

光标移动之行 ^ $ ngg…

光标移动之跳转 f F …

光标移动之句段 ( {

( { [’`" 各种括号引号

t 标签

a 全部

e 全文

公式1:操作符

dd:剪切一行 3dd/d3d:剪切包括本行在内的三行 以此类推

公式2:操作符 + 名词(前五个)

3dh/d3h:剪切光标所停留字符的左三个字符 3dj/d3j:剪切光标所在行及下面三行
db:剪切光标所停留单词到开头
dngg:剪切本行到第n行
dfn:剪切到当前行到下一个n字符
d{:剪切到段落开头

公式3:操作符 + 介词 + 名词(重点后四个)

diw 剪切当前光标所停留单词,或输入gbwdi(:删除( )中的所有内容
da(:删除( )中同时包括( )的所有内容
dit:剪切标签对中的内容,不包含标签对
dat:剪切标签对中的内容,包含标签对
yia:这个我试了以下,在for…in和for…of里面可以复制,其它的暂且不知
yie:复制全文

其它操作符及编辑技巧 6个

rx 用字符x替换光标位置的字符 nrx 用x字符替换光标位置前的n个字符 R 进入替换模式

p 粘贴到当前光标的右边/下一行 P 粘贴到当前光标的左边/上一行 np(nP) 重复粘贴内容n次

<< 向前缩进

>> 向后缩进

u 撤销操作

. 再次执行刚执行过的命令

:上述展示的都是很常用的Vim普通模式下的编辑技巧

常用命令

相信尝试过上述的Vim基础后,用一段时间的你,一定能够掌握好适合的常用命令

小技巧

  1. Ctrl 键有时候可以用小拇指指根摁
  2. VSCode内置的 Alt + ↑/↓ 将当前行或者块(visualmode选择即可)上/下移
  3. 大写字母可以使用 Shift + 字母

自带插件

vim-easymotion:Vim插件介绍里vim-easymotion有详细说明,常用的有以下(键映射中有)

vscode vim esc失效_编辑器_02

vim-surround:同上,可以自己尝试,以下例子

Old text Command New textHello world vS" "Hello world" "Hello world" ds" Hello world Hello world ysiw[ [ Hello ] world Hello world ysiw] [Hello] world [Hello] world cs]" "Hello" world "Look ma, I'm *HTML!" cs"<q> <q>Look ma, I'm HTML!</q> <div>Yo!*</div> dst Yo! <div>Yo!*</div> cst<p> <p>Yo!</p>

vim-sneak:同上,和easymotion有些像,但是有自己的方便之处

其他

切换大小写

~ 将光标下的字母改变大小写
3~ 将光标位置开始的3个字母改变其大小写
g~ 改变当前行字母的大小写,
gUU 将当前行的字母改成大写
guu 将当前行的字母改成小写
gUaw或gUiw 将光标下的单词改成大写
guaw或gUaw 将光标下的单词改成小写

其它跳转方式

/string,n下翻查询结果,N上翻查询结果,enter跳转(string代表你想查找的内容)

插入模式下的光标移动

个人习惯是,在插入模式下且移动的范围很小的时候,选择性的使用插入模式下的光标移动,它的原生vim中的快捷键如下(不过很多与VSCode内置快捷键是冲突的,我是直接使用↑/↓/←/→新手使用Vim先适应模式切换,暂且不用插入模式下的光标移动可能更锻炼一些)

快捷键

作用

Ctrl + p

up

Ctrl + n

down

Ctrl + b

left

Ctrl + f

right

Ctrl + a

到行首

Ctrl + e

到行尾

Ctrl + h

delete 1

Ctrl + w

delete back 1 word

Ctrl + u

delete back to start of line

屏幕滚动

原生vim的快捷键如下

快捷键

功能

Ctrl + v

向上滚屏

Ctrl + e

向下滚屏

Ctrl + u

向上滚半屏

Ctrl + d

向下滚半屏

Ctrl + b

向上滚整屏

Ctrl + f

向下滚整屏