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在这里插入图片描述
:若配置了"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 剪切当前光标所停留单词,或输入gbw
di(:删除( )中的所有内容
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有详细说明,常用的有以下(键映射中有)在这里插入图片描述

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

Old text                  Command     New text
Hello 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 + pup
Ctrl + ndown
Ctrl + bleft
Ctrl + fright
Ctrl + a到行首
Ctrl + e到行尾
Ctrl + hdelete 1
Ctrl + wdelete back 1 word
Ctrl + udelete back to start of line

屏幕滚动

原生vim的快捷键如下

快捷键功能
Ctrl + v向上滚屏
Ctrl + e向下滚屏
Ctrl + u向上滚半屏
Ctrl + d向下滚半屏
Ctrl + b向上滚整屏
Ctrl + f向下滚整屏

参考链接

All About Vim

新手如何正确入门vim?

在VSCode中使用Vim的正确方式

指尖飞舞:vscode + vim 高效开发(系列视频)

vim常用命令总结 (转)

vscode和chrome使用vim

vim中的杀手级插件: surround

非常感谢!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐