前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VSC x VIM - 反正多学几个快捷键没有坏处

VSC x VIM - 反正多学几个快捷键没有坏处

作者头像
szhshp
发布2022-10-31 14:55:13
1.2K0
发布2022-10-31 14:55:13
举报

Command Cheatsheet

  • 光标移动
    • 按照单词移动
      • w: 跳到下一个单词的开头
      • b: 跳到当前单词或者上一个单词的开头
      • e: 跳到当前单词或者下一个单词的结尾
      • ge: 调到上一个单词的结果
    • 行按照行移动 j
      • 0: 数字 0, 跳到行首的任何字符
      • $: 跳到行尾的任何字符
      • ^: 跳到行首的非空字符
      • g_: 跳到行尾的非空字符
      • gg: 跳到文件第一行的行首非空字符
      • G: 跳到文件最后一行的行首非空字符
    • 字符查找
      • f{char}: 跳转到行内下一个 {char} 位置
      • F{char}: 跳转到行内上一个 {char} 位置
      • t{char}: 跳转到行内下一个 {char} 前, 比 f{char} 少取一个字符
      • T{char}: 跳转到行内上一个 {char} 后, 同样少取一个字符
      • ;: 重复执行上一次字符查找
      • ,: 反向执行字符查找
  • 动作
    • i: 选中范围内(Inner), vi( 会选括号内的内容
    • a: 选中范围(Around), va( 会连括号一起选中
  • 操作符(Operator)
    • d: 删除(同时会复制)
    • c: 修改(同时进入插入模式)
    • y: 复制
    • v: 进入 VISUAL 模式
  • 混合使用
    • dd: 删除一行
    • cc: 删除一行并从非空位置开始输入
    • yy: 复制一行
    • 2yy: 复制三行
    • di(/dib: 删除小括号内的内容
    • da(/dab: 删除小括号以及里面的内容
    • di{/diB: 删除大括号内的内容
    • ci<: 快速修改尖括号里面的内容
    • dfa: 从当前开始删除到下一个字母 a
    • ya`: 快速复制 backtick 符号以及里面的内容
    • d$: 从当前一直删除到结尾
    • d^: 从当前一直删除到开头
    • die: 删除整个文件
    • dit: 删除一个 Tag 里面的内容, 适合 XML 文件
    • dat: 删除一个 Tag 全部
  • 宏的录制
    • q{char}: 录制一个宏命令并保存到 {char} - q: 输入完毕后停止录制, 可能不会有什么反应但是会停止录制 - @{char}: 执行录制的名称为 {char} 的宏 - :register {char}: 查看已经录制的宏的细节 - qaq: 清楚所有宏

VSC VIM 插件

首先需要安装 VSC 的 VIM 插件

通用

  • gd: VSC 类似 Ctrl+点击, 查看所选内容的引用
  • gh: 类似于鼠标 hover
  • af - visua mode command which selects increasingly large blocks of text. For example, if you had "blah (foo [bar 'ba|z'])" then it would select 'baz' first. If you pressed af again, it'd then select [bar 'baz'], and if you did it a third time it would select "(foo [bar 'baz'])".
  • gt/gT: 正向反向跳转文件标签页, VSC 自身也有快捷键这个可以选择性使用
    • 1gt: 这个其实是激活第二个标签页, 注意不是跳两次

vim-easymotion

这个插件的目的是为了方便使用 motion 命令快速跳转

需要进行一些配置:

代码语言:javascript
复制
  "vim.leader": "<space>", // 关键快捷键
  "vim.easymotion": true, // 开启功能

如上配置之后可以通过 <space><space>w{char} 快速跳转到包含特定字母的字符的开头

Hotkeys

Motion Command

Description

<leader><leader> s <char>

Search character 搜索单个字母

<leader><leader> f <char>

Find character forwards 向后搜索单个字母, 建议使用 <leader><leader> s <char> 代替

<leader><leader> F <char>

Find character backwards 向前搜索单个字母, 建议使用 <leader><leader> s <char> 代

<leader><leader> t <char>

Til character forwards

<leader><leader> T <char>

Til character backwards

<leader><leader> w

Start of word forwards 向后搜索单词头

<leader><leader> b

Start of word backwards 向前搜索词头

<leader><leader> l

Matches beginning & ending of word, camelCase, after _, and after # forwards 向后搜索单词词首或者词尾, 单词数量少的情况下 <leader><leader> w 效率更高

<leader><leader> h

Matches beginning & ending of word, camelCase, after _, and after # backwards 向前搜索单词词首或者词尾, 单词数量少的情况下 <leader><leader> w 效率更高

<leader><leader> e

End of word forwards

<leader><leader> ge

End of word backwards

<leader><leader> j

Start of line forwards

<leader><leader> k

Start of line backwards

<leader><leader> / <char>…… <CR>

Search n-character

<leader><leader><leader> bdt

Til character

<leader><leader><leader> bdw

Start of word

<leader><leader><leader> bde

End of word

<leader><leader><leader> bdjk

Start of line

<leader><leader><leader> j

JumpToAnywhere motion; default behavior matches beginning & ending of word, camelCase, after _ and after #

Personal Mapping
代码语言:javascript
复制
{
	"before": ["J"], // 将 Shift+J 设置成 Easymotion 的
	"after": ["<leader>", "leader", "/"]
},

vim-surround

代码语言:javascript
复制
  "vim.surround": true,

Surround Command

Description

y s <motion> <desired>

Add desired surround around text defined by <motion> 对特定内容添加包裹符号

d s <existing>

Delete existing surround 删除包裹的符号

c s <existing> <desired>

Change existing surround to desired 替换包裹的符号

S <desired>

Surround when in visual modes (surrounds full selection)

VSCode 推荐键位映射

代码语言:javascript
复制
	"vim.normalModeKeyBindings": [
    {
      "before": ["H"],
      "after": ["^"],
    },
    {
      "before": ["L"],
      "after": ["g","_"],
    }
  ]

Vim - 基础

编辑模式

  1. 普通模式下按下 i 进入插入模式
    1. 使用 i 将光标定位到选择内容前方
    2. 使用 a 将光标定位到选择内容后方
  2. 插入模式下按下 Esc 或者 Ctrl+[ 回到普通模式
  • 如果不确认在哪个模式就按两下 Esc 回到普通模式

普通模式

  1. {char} 指任何可输入字符
  2. <CR>Enter 按键
  3. <C-{char}> 指按住 Ctrl 然后按下 {char} 对应的按钮

简单命令

命令码

含义

Comment

h j k l

光标左,下,上,右

x

删除一个字符

y

复制

.

重复上次编辑行为,重复命令码之前执行的所有编辑行为

圆点符号

u

撤销

>

增加缩进

w

正向移动到下一单词的开头

改为大写按钮后则不按照单词移动,按照字串移动

b

反向移动到上一单词的开头

改为大写按钮后则不按照单词移动,按照字串移动

e

正向移动到下一单词的结尾

改为大写按钮后则不按照单词移动,按照字串移动

c

修改

从当前字符修改至单词末尾: cw修改整个单词: caw

d

删除光标所在整个单词

删除整个单词: daw删除整个段落: dap

<C-a>

对选中的数字进行加 1 对选中的数字进行减一

对负数也有效

f{char}

在行内查找下一指定字符

继续查找下一个: ;继续查找上一个: ,

/pattern<CR>

在文档中查找下一处匹配项

继续查找下一个: n继续查找上一个: N

?pattern<CR>

在文档中查找上一处匹配项

同上

:s/target/replacement

替换

继续替换下一个: &回退: u替换特定行范围内的文字: {num},{num}s/old/new/

$

行尾

单独使用可以跳到行尾,也可配合其他命令使用

r

替换

可以替换单个字符,如果选中多个字符则会换为相同长度的重复单个字符

%

跳转括号

跳转到对应括号的字符处

a

在光标之后插入文本

在行末插入文本: A

:wq

保存并退出

前方加上! 可以强制执行

:q

不保存并退出

前方加上! 可以强制执行

:{number}

直接跳转特定行号

0

无脑移动到行首

^

移动到本行第一个非 blank 的位置

$

无脑移动到行尾

注意这里和 ^ 并不是完全相反的功能

g_

移动到本行最后一个非 blank 的位置

注意是 g 后面带上一个下划线

o O

在当前行的前或后重新创建一行开始输入并进入编辑模式

这里是大小写的字母 O

I A

在当前行的行首或行尾开始输入并进入编辑模式

附一张 VIM 键位图1

Example

快速选取 1

例如下面这样的文字:

代码语言:javascript
复制
	|  aaa| vaaaa<br>aaaa<br>bbbb  |

如果我们要修改出左边的aaa,则可以直接双击然后修改

而若要修改右边的一团vaaaa<br>aaaa<br>bbbb,只需要几个按键:vt|

  1. v 代表开始选择
  2. t 代表直到某个特定字符
  3. | 就代表竖线字符

如此可以快速的选中右边的一团,最重要的是不需要操作鼠标

如果有多个这样格式的一团需要进行批量选中修改,那么VIM可以节省很多时间

快速选取 2
代码语言:javascript
复制
	[^2]: [http://www.vimer.cny](http://www.vimer.cn)

例如需要选取大括号内的数据,只需要输入vi[ 即可快速选中括号内所有数据,而不用移动鼠标来进行选取

如果选取是为了修改则可以直接输ci[

之前就听说 Marco Recording 是个很 6 的功能,这次正好来体验一下2

比如有 100 个这样的 item,要从中筛选出 30 个,如果用普通方法我们需要选中每个 item,然后删除,如果使用普通vim,我们可以使用5dd来删除每个 item,但是需要定位到 item 开头的cards标签才能执行,这时候macro是个很不错的 Solution

代码语言:javascript
复制
	cards
		cardNamecardName
		cardDesc-cardDesc
		cardType7cardType
	cards
	cards
		cardNamecardName
		cardDesc-cardDesc
		cardType7cardType
	cards
	cards
		cardNamecardName
		cardDesc-cardDesc
		cardType7cardType
	cards
宏相关命令

命令码

含义

Comment

q{char}

录制宏并保存到{char}这个变量中

q

停止录制

「{char}p

显示{char}变量里录制好的命令细节,会输出到光标所在位置

{num}@{char}

执行{char}里面录制的宏命令

这时候只需要以下几步

  1. qa : 开始录制宏并保存到变量a
  2. ?cards{Enter} : 跳转到前一个 cards 的位置并取消选择
  3. 5ddq : 删除 5 行并停止录制

然后如果想要删除特定 item 就只需要输入@a来调用变量a里面保存的宏命令

参考文献

  1. http://www.vimer.cny
  2. http://www.cnblogs.com/ini_always/archive/2011/09/21/2184446.html
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Command Cheatsheet
  • VSC VIM 插件
    • 通用
      • vim-easymotion
        • Hotkeys
        • Personal Mapping
      • vim-surround
        • VSCode 推荐键位映射
        • Vim - 基础
          • 编辑模式
            • 普通模式
              • 简单命令
                • Example
                  • 快速选取 1
                  • 快速选取 2
                  • 宏相关命令
              • 参考文献
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档