vim guide

第一章:光标移动

移动光标

单位级

  • h 向左一字符
  • j 下一行
  • k 上一行
  • l 向右一字符

单词级

  • w or W 向右移动到下一单词开头
  • e or E 向右移动到单词结尾
  • b or B 向左移动到单词开头

注意:所有小写单词都是以分词符作为单词界限,大写字母以空格作为界限

块级

  • gg 到文档第一行
  • G 到文档最后一行
  • 0 到行首(第 1 列)
  • ^ 到第一个非空白字符
  • $ 到行尾
  • H 移动到屏幕顶端
  • M 移动到屏幕中间
  • L 移动到屏幕底部
  • Ctrl-d 向下移动半页
  • Ctrl-u 向上移动半页
  • Ctrl-f 向下移动一页
  • Ctrl-b 向上移动一页
  • :<N> or <N>gg 跳转到第 N 行
  • :+<N> or <N>j 向下跳 N 行
  • :-<N> or <N>k 向上跳 N 行

gf - go file

第二章:打开文件、查找内容

打开文件

在 Vim 中打开文件

  • :e <filename> 打开名为 filename 的文件,若文件不存在则创建之
  • :Ex 在 Vim 中打开目录树,光标选中后回车打开对应文件(提示:- 进入上级目录

查找

文档内查找

  • * 向后查找光标当前所在单词
  • # 向前查找光标当前所在单词
  • /<search> 向后查找指定字符串
  • ?<search> 向前查找指定字符串
  • n 继续查找下一个
  • N 继续查找上一个

行内查找

  • f<X> 当前行内向行尾方向查找并定位到字符 X
  • t<X> 当前行内向行尾方向查找并定位到字符 X 之前
  • F<X> 当前行内向行首方向查找并定位到字符 X
  • T<X> 当前行内向行首方向查找并定位到字符 X 之后
  • ; 继续向当前方向查找下一个字符
  • , 向当前相反方向查找下一个字符

当前文档中有几个 “Vim” 单词,你可以尝试用 *# 进行查找并感受 nN
的方向性。

上面的 “注意” 中有几个字符 “n”,你可以在那试试行内查找并感受下 ;, 的方
向性。

匹配查找

Vim 中可以使用 %()[]{} 进行匹配查找,当光标位
于其中一个符号上时,按下 %,光标会跳到与之匹配的另外一个符号上。

在下列文本中的 ()[]{} 字符上按 % 看看效果,连续多按几次。

const func = (win, doc) => {
  const SEVEN = ((1 + 2) * (3 + 4) * (5 - 6)) / 7;
  const YU = [1, 2, [[3, 4], 5, 6], 7];
  if (true) {
    return SEVEN;
  } else {
    return YU;
  }
};

第三章:文档的修改与保存

插入

  • i 当前字符前插入
  • a 当前字符后插入
  • I 行首插入
  • A 行尾插入
  • o 在下一行插入
  • O 在上一行插入

删除(并保存到 Vim 剪贴板)

  • s 删除当前字符,并进入 INSERT 模式
  • S 删除当前行并保存到 Vim 剪贴板,同时进入 INSERT 模式(等同于 cc
  • x 删除当前字符,相当于 insert 模式下的 Delete
  • X 删除前一个字符,相当于 insert 模式下的 Backspace
  • dd 删除当前行,并将删除的内容保存到 Vim 剪贴板
  • d<X> 删除指定内容并保存到 Vim 剪贴板
  • cc 删除当前行并保存到 Vim 剪贴板,同时进入 INSERT 模式
  • c<X> 删除指定内容并保存到 Vim 剪贴板,同时进入 INSERT 模式
    说明: <X> 部分是对操作内容的描述,如果要删除一个单词,就输入 dw 或者
    de,要复制当前位置到行尾的内容,就输入 y$,要删除后面 3 个字符并插入,就输入
    c3l 诸如此类。_

复制

  • yy 复制当前行到 Vim 剪贴板
  • y<X> 复制指定内容到 Vim 剪贴板

粘贴

  • p 在当前位置后粘贴
  • P 在当前位置前粘贴

合并

  • J 将当前行与下一行合并

尝试在下面的文本中进行复制粘贴练习

删除这一行
粘贴到这一行下面
剪切 ABC 并把它粘贴到 XYZ 前面,使这部分内容看起来像
剪切 并把它粘贴到 ABC XYZ 前面。

替换

  • r<X> 将当前字符替换为 X
  • gu<X> 将指定的文本转换为小写
  • gU<X> 将指定的文本转换为大写
  • :%s/<search>/<replace>/ 查找 search 内容并替换为 replace 内容

尝试修改下列文本的大小写

Change this line to UPPERCASE, THEN TO lowercase.

还有个更好玩的命令 g~<X>,先将光标定位到上面那行文本,执行 0g~$ 看看发生了
什么。

撤销、重做

  • u 撤销
  • Ctrl-r 重做

保存文件

  • :w 保存当前文件
  • :wa 保存全部文件
  • :wq or ZZ 保存并退出
  • :q! or ZQ 强制退出,不保存
  • :saveas <new filename> 文件另存为
  • :w <new filename> 文件另存一份名为 <new filename> 的副本并继续编辑原文件

第五章:分屏与标签页

窗口分屏

工作中经常会遇到这种情况,就是需要参照其他文档编辑当前文档(场景:翻译),或者从
另外一个文档 copy 代码到当前文档(场景:复制 html 元素类名到 css 文档),这时候
就是你最需要分屏的时候。

分屏方式

  • :split 缩写 :sp or Ctrl-w s 上下分屏
  • :vsplit 缩写 :vs or Ctrl-w v 左右分屏
  • :diffsplit 缩写 :diffs diff 模式打开一个分屏,后面可以加上 {filename}

窗口跳转

  • Ctrl-w w 激活下一个窗口
  • Ctrl-w j 激活下方窗口
  • Ctrl-w k 激活上方窗口
  • Ctrl-w h 激活左侧窗口
  • Ctrl-w l 激活右侧窗口

移动分屏

  • Ctrl-w L 移动到最右侧
  • Ctrl-w H 移动到最左侧
  • Ctrl-w K 移动到顶部
  • Ctrl-w J 移动到底部

注意:区分大小写。另外,可以将底部的屏幕移动到右侧,实现上下分屏到左右分屏的转
换。

屏幕缩放

  • Ctrl-w = 平均窗口尺寸
  • Ctrl-w + 增加高度
  • Ctrl-w - 缩减高度
  • Ctrl-w _ 最大高度
  • Ctrl-w > 增加宽度
  • Ctrl-w < 缩减宽度
  • Ctrl-w | 最大宽度

实践!实践!实践!

标签页

第二章中提到过的 buffer 和刚刚讲到的分屏操作都很适合在少量文件之
间进行切换,文件超过 3 个我觉得就不方便了,而标签页则更适合多文件之间的切换。

创建标签页

  • :tabnew or :tabedit 缩写 :tabe 打开新标签页
  • Ctrl-w gf 在新标签页中打开当前光标所在位置的文件名

注意::tabnew:tabedit 后面都可以跟一个 <空格><文件名> 用以在新标签页中
打开指定文件,还可以在 : 后面加一个数字,指出新标签页在列表中的位置(从 0 开始
)。

切换标签页

  • gt or :tabnext 缩写 :tabn 下一个标签页(最后一个会循环到第一个)
  • gT or :tabprevious 缩写 :tabp 上一个标签页(第一个会循环到最后一个)
  • :tabrewind 缩写 :tabr or :tabfirst 缩写 :tabfir 到第一个
  • :tablast 缩写 :tabl 到最后一个标签页

关闭标签页

  • :tabclose 缩写 :tabc 关闭当前标签页
  • :-tabc 关闭上一个标签页
  • :+tabc 关闭下一个标签页
  • :tabonly 缩写 :tabo 关闭其他标签页

下一章将介绍块操作。

第六章:块操作

我们经常会遇到这种情况:某处有一个多行文本,我们要把他复制到代码中用来初始化一个
数组。 大部分时候我们会这么做:

  • 写好数组声明;
  • 把内容复制到中括号内(大概长成下面那段文本的样子)
  • 然后行首加 ' 行尾加 ',,重复直到最后一行(想象一下这段文本有 50 行)

有了 Vim 块操作就不用这么麻烦了,按 014gg,然后跟着选中那一行的指示操作。

var myArray = [
Ctrl-v 进入块操作,$ 到行尾,j 到下一行(做!)。
按 j 到下一行
下面还好多行,干脆来个 4j 多跳几行
https://www.yahaha.net
https://www.yahaha.net
以后看好行号再跳!现在按 A 插入,然后输入 <单引号><逗号><Esc> 完成第一步。
// Oops... 跳多了,没事,按 k 回到上一行
];

现在已经完成了第一步,还需要补前面的 ',按 14gg 回到那一行,再操作一次,但
是这次有三个地方要变化一下:

  1. 第一行按 $ 时改按 0,因为这次要在行首插入;
  2. 末行按 A 时改按 I,块操作中 A 是字符后插入, I 是字符前插入;
  3. 最后按 <单引号><Esc>

最后再做些收尾工作,19gg$x 删掉最后一行结尾处的 ,,然后 14gg7== 把代码缩
进一下。

Done!

注意:选择行首行尾的操作也可以在选择完要处理的内容之后执行,即
Ctrl-v jjj$A',<Esc>

接下来我们说说 Vim 中的宏

第七章:Vim 中的宏

宏操作在 Vim 中(甚至任何编辑器中)属于比较复杂的操作了,如果前面的内容都已经掌
握了,那么你已经可以算是一个 Vim 高手了,所以,这位高手,我们不妨再来进阶一下吧

还记得上一章中把文本转成数组的例子吧,我们还做同样的事,不过这次
是用宏来操作。

14gg 跳转到准备开始处理的起始行,按指示进行操作,先看效果后解释。

var myArray = [
按 qa 开启宏录制,前方高能,连续按 I<单引号><Esc>A<单引号><逗号><Esc>jq7@a
我也要
我也要
我也要
我也要
我也要
我也要
我也要
];

OMG! 发生了什么,有没有惊出一身冷汗,之前两次块操作的结果瞬间就完成了,最后再简
单做些收尾工作,去掉最后一行的逗号,集体缩进一下,搞定!

下面来解释一下刚才的操作:

  • q 是开启录制宏,a 是给这次宏的录制过程一个存储位置,可以是 0-9 或 a-z;
  • 然后 I<单引号><Esc>A<单引号><逗号><Esc>j 是你这次录制的整个宏的操作过程,意
    思就是行首插入单引号,行尾插入单引号和逗号,跳到下一行;
  • 接下来的 q 是结束本次宏的录制;
  • @ 是唤起宏,a 是要唤起的宏的名字(存储位置),前面的 7 你应该明白吧,就
    是执行 7 次。

Tips:@@ 再次唤起最后一次执行的宏。


再次感谢您的关注!如果爱,请分享。爱生活,爱 VIM!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexmaodali

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值