下一个泡泡玛特工程师是谁呢?

收集一些自己用到的prompt

2023-04-05 · 1 min read

机械键盘相关参数

机械键盘相关参数记录

2023-04-05 · 1 min read

Web 前端性能优化

常用的web前端性能优化手段

2023-03-19 · 3 min read

Blender常用快捷键

自己经常用到的一些快捷键记录

2022-12-11 · 1 min read

Docker 常用命令

精简 Docker 常用命令

2022-11-06 · 1 min read

项目管理

项目管理相关知识

2022-11-06 · 1 min read

JS沙箱sandbox的各种实现

我们把Js隔离机制常常称作沙箱

2022-09-18 · 1 min read

Amazing!Solid 比react还react

今天来介绍2个amazing的东东

2022-09-12 · 1 min read

puppeteer应用

使用傀儡师来操作浏览器这个傀儡吧

2022-09-11 · 1 min read

做一个web termianl

前端react, 后端nodejs, 直接可用版web termianl

2022-07-17 · 1 min read

TypeScript里常用的工具类型

经常用到的工具类型,提取抽离出来,供以后复用

2022-06-26 · 1 min read

Vim大法好

想要丢掉鼠标,试试Vim

2022-06-26 · 1 min read

碧血丹心

无论时光如何沾染风霜,也永似红日光

2022-05-10 · 1 min read

chrome V8 引擎中的垃圾回收机制

V8引擎就是nodejs的发动机

2022-03-03 · 1 min read

如何开发一个cli

命令行交互界面是程序员必备的工具,如何开发一个呢?

2022-02-21 · 1 min read

Javascript中的哲学

道生一,一生二,二生三,三生万物

2022-02-20 · 1 min read

React Redux 实现 (Context 版)

React Redux 实现 (Context 版)

2022-02-16 · 1 min read

mobx-react 使用

虽然不常用,但是可以学一下

2022-02-16 · 1 min read

Less中的for和forEach循环

循环的使用是保持代码干燥和避免重复的好方法

2022-02-15 · 1 min read

Webpack Splitchunks 详解

webpack 优化

2022-02-15 · 1 min read

ssh-keygen命令详解

为ssh生成、管理和转换认证密钥

2022-02-15 · 1 min read

使用CURL发送POST请求

curl 是常用的命令行工具,用来请求 Web 服务器。

2022-02-15 · 1 min read

Webpack Plugin 开发

让我们来学一下如何开发一个webpack插件

2022-02-14 · 1 min read

JS 实现两个大数相加?

algo-adding-large-numbers

2022-02-10 · 1 min read

字典树 trie

字典树 trie

2022-02-09 · 1 min read

浏览器原理问题

浏览器原理问题

2022-01-11 · 1 min read

MacBook快速进入一个文件夹目录

mac如何快速进入一个文件夹

2021-10-26 · 1 min read

react合成事件

react-synthetic-event

2021-10-25 · 1 min read

mini webpack实现

通过babel核心来实现迷你版的webpack

2021-10-10 · 1 min read

设计模式

在程序设计中有很多实用的设计模式,而其中大部分语言的实现都是基于类

2021-10-10 · 1 min read

babel核心

babel核心介绍

2021-10-07 · 1 min read

React 15 和 React 16 的区别

react-15-16

2021-10-06 · 1 min read

React性能优化

浅谈react性能优化的方法

2021-10-05 · 1 min read

交通信号灯实现

如何用js来实现交通信号灯呢

2021-09-25 · 1 min read

内存管理

前端中的内存管理

2021-09-25 · 1 min read

前端安全

前端关于安全方面的知识

2021-09-25 · 2 min read

网络和并发

http各版本对于并发的支持,前端如何控制并发量?

2021-09-25 · 1 min read

跨域方法

总结了9种跨域方法

2021-09-24 · 1 min read

react virtualList 虚拟列表无限滚动实现

用react实现虚拟滚动

2021-09-16 · 1 min read

监控埋点方案

前端监控埋点方案

2021-09-16 · 1 min read

Mini useEffect实现

如何实现useEffect?

2021-09-11 · 1 min read

Mini useState 实现

我们来思考一下useState是怎么实现的呢?

2021-09-11 · 1 min read

React Fiber

react-fiber

2021-09-11 · 1 min read

React class组件和function组件异同

类组件和函数组件有何相同点有何不同点呢?

2021-09-11 · 1 min read

Lodash Get 实现

algo-lodash-get

2021-09-08 · 1 min read

手写reduce实现

algo-reduce

2021-09-08 · 1 min read

Hooks 原理概览

react-hooks

2021-09-05 · 1 min read

Hook原理——状态Hook

react-hook-state

2021-09-05 · 1 min read

手写Mini Redux实现

手写一个简易版的redux实现,包含了核心逻辑

2021-09-04 · 1 min read

legacy和concurrent模式

react-legacy-concurrent

2021-09-01 · 1 min read

react架构

总体 react 的核心可以用 ui=fn(state)来表示 3 大核心对象、3 大核心阶段、2 大工作循环 Scheduler(调度器): 排序优先级,让优先级高的任务先进行 reconcile Reconciler…

2021-09-01 · 2 min read

react核心api和jsx

为什么要有jsx,为什么会有虚拟bom

2021-09-01 · 1 min read

setState是同步的还是异步的

react-setstate-usestate

2021-08-31 · 1 min read

如何使用NodeJs创建HTTP服务?

如何使用NodeJs创建HTTP服务?

2021-08-17 · 1 min read

NodeJS 事件循环模型

nodejs-eventloop

2021-08-11 · 2 min read

Buffer

nodejs中的内存管理

2021-08-10 · 1 min read

微前端解决方案-qiankun

目前国内最好的微前端解决方案-qiankun

2021-08-10 · 1 min read

React Mini版实现(1)

学一门技术最好的方法就是做一个其玩具版的实现,我们来尝试实现一下react和react-dom最简单版本吧

2021-08-04 · 1 min read

brew安装

brew 是 MacOS 上的包管理工具,可以简化 macOS 和 Linux 操作系统上软件的安装。

2021-08-04 · 1 min read

CommonJS简易版实现

CommonJS我们经常用,如何实现一个简易版的commonJS呢?

2021-08-01 · 1 min read

极品透明Dashboard样式分享

一个极品透明Dashboard样式分享

2021-07-30 · 1 min read

Stream

nodejs中的流

2021-07-11 · 1 min read

NodeJS全局对象

JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。

2021-05-18 · 1 min read

如何部署Nodejs服务

如何快速的部署一个Nodejs服务到公网呢?

2021-05-12 · 1 min read

Events

events模块是node的核心模块之一,几乎所有常用的node模块都继承了events模块,比如http、fs等。

2021-05-11 · 1 min read

用JS绘制背景,让CSS直接使用 'background:paint(xxx)'

CSS对象新特性,新的background设置方式

2021-04-30 · 1 min read

Block Formatting Context 块级格式化上下文

可以将BFC看成是元素的一种属性,拥有了这种属性的元素就会使他的子元素与世隔绝,不会影响到外部其他元素

2021-04-17 · 1 min read

如何使用Nodejs来创建一个TCP/UDP服务?

如何使用Nodejs来创建一个TCP/UDP服务?

2021-04-17 · 1 min read

Mac使用tree生成目录结构

程序员经常会有需求,需要列出项目的结构树。Mac或者Linux下可以使用tree列出项目结构

2021-04-04 · 1 min read

常见算法

一些比较常见算法

2021-03-20 · 1 min read

前端缓存

对于性能优化离不开缓存

2021-02-28 · 1 min read

前端答疑

一些比较常见的问题

2020-09-02 · 1 min read

Nodejs 网络 & HTTP

nodejs-network

2020-08-14 · 1 min read

JavaScript AST 抽象语法树

源代码的抽象语法结构的树状表现形式

2020-08-02 · 1 min read

nodejs里面向切面编程的一种范式

在一些场景下我们可能需要一种面向切面的编程方式

2020-08-01 · 1 min read

各种JS模块化特性

AMD、CMD、CJS、ESM

2020-05-30 · 1 min read

手写Ajax实现

使用HMR一步步实现Ajax

2020-05-30 · min read

手写PromiseA+实现

如何自己实现promiseA+规范,手写一个promise实现

2020-04-30 · 1 min read

debug和内存泄露

nodejs的debug方法

2020-04-08 · 1 min read

Javascript prototype 原型链

js-prototype

2019-09-07 · 1 min read

this指针、作用域

this是在执行时动态读取上下文决定的,不是在定义时决定

2019-06-14 · 1 min read

call、apply、bind的极简实现

使用symbol实

2019-06-03 · 1 min read

CSS联合选择器区分列表元素个数不同所要求的不同样式

对于列表,在有些时候针对于不同个数的item会有不同的显示,比如col份数,用js固然可以,是否可以用css更简便的实现呢?

2019-04-30 · 1 min read

TypeScript基础

介绍TypeScript基础知识

2019-04-30 · 1 min read

JS中的变量提升

为什么js当时要这样设计

2019-03-07 · 1 min read

ES6之Class

关于ES6里的class, 我们有什么不知道的事?

2019-03-01 · 1 min read

HTTP详解

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议

2019-02-17 · 2 min read

极简代码实现节流Throttle和防抖Debounce

使用各9行代码实现节流和防抖函数

2019-01-30 · 1 min read

Javascript 事件循环 EventLoop

js-eventloop

2018-09-07 · 1 min read

POST和GET区别

POST和GET区别是什么呢?

2018-08-14 · 1 min read

正则表达式

正则表达式一锅端

2018-07-30 · 1 min read

cloneDeep 深克隆实现

algo-clonedeep

2017-09-07 · 1 min read

webpack

engin-webpack

2017-09-07 · 1 min read

http1.1和http2.0有什么区别

http1.1和http2.0有什么区别

2017-06-14 · 1 min read

手写EventEmitter事件巴士

咱们来手写实现一个EventEmitter事件巴士

2017-01-10 · 1 min read

OOP 面向对象编程

对象是什么?为什么要面向对象?

2016-05-08 · 1 min read
Stay hungry & Stay foolish
战歌
16
The Reluctant Warrior
Immediate Music
To Glory
Two Steps From Hell
Victory
Two Steps From Hell
Empire of Angels
Thomas Bergersen
Serenata Immortale
Immediate Music
Cornfield Chase
Hans Zimmer
Tennessee
Hans Zimmer
He's a Pirate
Martin Ermen
Rise
Hans Zimmer
On Thin Ice
Hans Zimmer
Angels Will Rise
Twisted Jukebo
When It All Falls Down
Audiomachine
Icarus
Ivan Torrent
Star Sky - Instrumental
Two Steps From Hell
亡灵序曲
L
Up Is Down
Hans Zimm
回到首页

Vim大法好

袁官东
June 26th, 2022 · 1 min read
图:Amrit Pal Singh

1

跳行

number

按字符光标移动

1h/l 左/右 移动一个字符
24l 向右 4 个字符

基础操作

1ZZ 或 :wq 保存并退出
2:e! 恢复到上一次存储的文件内容
3:w pathname/filename 写入到其他文件中
4:rf pathname/filename 删除其他文件
5:!ls pathname 查看其他目录使用情况
6:sh -> ctrl-d 或 exit 创建对应的 shell 执行其任务后再返回
7ctrl-z -> fg 暂停 vi 后执行对应的任务后再返回

按行光标移动

10 移动到行首
2$ 移动到行尾
3^ 移到当前行第一个非空格处
410| 移到当前行第 10 列
5
6j/k 上一行/下一行
72j 向上移动 2 行
8
9G 移动到文件的结尾
101G 移动到文件的第一行
11ctrk-g 屏幕底部显示信息, 包含行号, 文件总行数, 当前位置占全文的百分比

按照文本块移动

1w 移动一个单词, 包含符号与标点
2W 移动一个单词, 不包含符号与标点
32w 移动两个单词
4
5b 倒退一个单词, 包含符号与标点
6B 倒退一个单词, 不好干符号与标点
7
8e 移到单词的尾部
9E 移到单词的尾部, 忽略标点符号
10
11( 移到当前句子的开头, 标点符号后有两个空格或者一行的最后一个非空格字符时候为一个句子
12) 移到下一个句子的开头
133) 向上移动 3 个句子
14
15{ 移到当前这一段的开头, 段落指的是空白行下的文本
16} 移到下一段的开头
17
18[[ 移到当前这一节的开头
19]] 移到下一节的开头

简单的文件编辑

1i insert, 插入
2a add, 添加
3c change, 更改
4d delete, 删除后放到缓冲区
5p paste, 粘贴, d -> p 可以移动行
6y 复制
7
8cw 表示更改整个单词
9
10x 删除一个字符
11r 重写改写一个字符

添加文本

1a 光标之后添加
2A 行结尾添加
3
4i 光标之前添加
5I 行开头添加
6
7o 光标位置下一行打开新行添加
8O 光标位置上一行打开新行添加

修改文本, 需告知有多少文本要修改, 可结合光标移动命令使用

1cw 光标到单词结尾要修改, 因此可以用英语单词的部分修改, 只要光标停留在需要修改的开始位置即可
2c2b 光标往前 2 个字符
3c$ 或 C 光标到本行结尾
4c0 光标到此行开头
5cc 修改整行文本

替换文本

1r 替换一个字符
22r 同时替换两个字符
3R 替换整行, 逐渐覆盖
4
5s 替换一个字符, 先删除字符, 并进入插入模式, 因此可以用于将一个字符替换为多个的情况
6S 替换整行, 先删除整行, 并进入插入模式

修改大小写

1~ 修改一个字符为大写或者小写
23~ 修改三个字符为大写或者小写

删除文本, 需要告知有多少文本需要删除, 可结合光标移动命令使用

1dw 删除光标到单词尾部的字符, 包含单词尾部的空白
2de 删除光标到单词本身尾部的字符, 不包含尾部后边的空白
3dE 删除光标到单词尾部, 包含标点符号
4
5db 向前删除一个字符
6d0 删除光标到行开头的字符
7d$ 或 D 删除光标到结尾的字符
8
9dd 删除一整行字符
102dd 删除两行字符
11
12x x-ing out 打印机消除的意思, 删除一个字符
132x 删除两个字符
14X 删除光标之前的一个字符
152X 删除光标之前的两个字符

误删恢复

1u 撤销上一个命令
23p 将第三个缓冲区放到下一行, 默认保留九个缓冲区
3ctrl-r 重做一次撤销操作

移动文本, 采用先删除后放置的方法

1p 将缓冲区文本放到光标之后, 单行则放到同一行, 多行缓冲区则另起一行
2P 将缓冲区文本放到光标之前
3xp 对调两个字符

复制文本, 需要告知有多少文本需要复制, 可结合光标移动命令使用

1yw 复制光标到单词尾部的字符
2y0 复制光标到行开头的字符
3y$ 复制光标到行结尾的字符
4yy 或 Y 复制整行内容

重复命令, 每个命令均会被存储到一个临时的缓冲区, 直到发出下一个命令为主

1. 重复上一次的命令

合并行

1J 合并两行, 将当前行与下一行合并
23J 合并三行

编辑命令

文本对象更改删除复制
单个字符rxyl
五个字符5s5xy5l
一个单词cwdwyw
两个单词, 不包含标点符号c2Wd2Wy2W
后退三个单词c2bd2by2b
一整行ccddyy
到一行的结尾c$ 或 Cd$ 或 Dy$
到一行的开头c0d0y0

光标移动命令

1移动
2命令
3←↓↑→
4hjkl
5下一行第一个字符
6+
7上一行第一个字符
8-
9单词结尾
10e 或 E
11往前一个单词
12w 或 W
13往后一个单词
14b 或 B
15到一行的结尾
16$
17到一行的开头
180
19往缓冲区放置文本
20p 或 P
21保存编辑结果并离开
22ZZ
23不保存编辑结果并离开
24:q!
25光标所在位置插入文本
26i
27一行开头插入文本
28I
29光标所在位置附加文本
30a
31一行最后附加文本
32A
33光标下一行打开新行
34o
35光标上一行打开新行
36O
37删除一行并替换文本
38S
39新文本覆盖现有文本
40R
41合并当前行与下一行
42J
43重复上一个动作
44.
45撤销上一个动作
46u

滚动屏幕

1z-enter 移动当前行到屏幕顶端并滚动屏幕
2z. 移动当前行到屏幕中心并滚动屏幕
3z- 移动当前
4
5ctrl-f forward, 向上滚动一屏
6ctrl-b backward, 向下滚动一屏
7
8ctrl-u up, 向上滚动半屏
9ctrl-d down, 向下滚动半屏
10
11
12100z 将第一百行滚动到屏幕顶端

光标在屏幕中移动

1H high, 移到屏幕顶端的行
2M middle, 移到屏幕中间的行
3L low, 移到屏幕底部的行
410H 移到屏幕顶端往下的第十行
510L 移到屏幕底部往上的第十行

根据搜索模式来移动

1/ 向下匹配搜索
2? 向上匹配搜索
3n 往同一个方向重复搜索
4N 往相反方向重复搜索

在当前行搜索

1fx 光标移到本行出现下一个 x 字符的地方
22fx 搜索本行第二次出现 x 字符的地方
3Fx 光标移到本行出现上一个 x 字符的地方
4
5tx 光标移到本行出现下一个 x 字符的地方的前一个字符
6Tx 光标移到本行出现上一个 x 字符的地方的后一个字符
7
8; 重复上一个搜索命令, 方向相同
9, 重复下一个搜索命令, 方向相反
10
11'' 回到上一个包含记号的行开头
12`` 回到上一个记号或上下文

百花齐放的打开文件

1vi +n file 在第 n 行打开文件
2vi + file 在最后一行打开文件
3vi +/pattern file 在第一个出现 pattern 的地方打开文件
4vi -R file 只读模式显示文件
5vi -r file 恢复编辑缓冲区

缓冲区使用

1# vi 会将最后 9 次的删除操作保存在编号的缓冲区中, 1-9 的缓冲区, 1 表示最后一次的删除
2# vi 会将复制的文本放在按字母标识的缓冲区中, a-z 的缓冲区
3
4"1p 恢复最后一次的删除内容, 光标之后插入
5"1pu. 逐一将缓冲区内容放置到当前光标之后, u会删除文本, .则重复放置, 不断轮换知道找到所需的文本
6
7"dyy 将当前行复制到缓冲区 d 中, "加上缓冲区名字, 可以用于命名缓冲区
8"dP 将缓冲区 d 中内容放置到光标之前

对某一处做标记

1mx 将当前位置标记成 x
2
3'x 单引号, 将光标移动到 x 标记所在的第一行
4'' 两个单引号, 回到上一个标记或上下文所在行的开头
5
6`x 反引号, 将光标移到以 x 标记的字符位置
7`` 两个反引号, 回到上一个标记或上下文的确切位置

ex 命令

1:1p 打印第 1 行
2:1 打印第 1 行
3:1,3 打印 1-3 行
4
5:1s/GitLab/gitlab 替换第一行的 GitLab 为 gitlab
6:s/GitLab/gitlab 在当前行替换 GitLab 为 gitlab
7
8:vi ex 模式下转换为 vi 模式
9Q vi 模式下转换为 ex 模式
10
11:1,3d delete 可简写为 d, 删除第 1 行到第 3 行
12:1m2 move 可简写为 m, 将第 1 行移到第 2 行之后
13:1co2 copy 可简写为 co, 与 t 同意, 将第 1 行复制到第 2 行之后
14
15:set nu number 可简写为 nu, 设置显示行号
16:set nonu no number 可简写为 nobu, 禁用显示行号
17:1,10# 暂时显示 1-10 行的行号
18
19:= 列出文件的总行数
20:.= 列出当前所在行的行号
21:/pattern/= 列出 patter 第一次出现的行号
22
23:. 表示当前这一行
24:$ 表示文件最后一行
25:% 表示文件中每一行
26:.,+20# 显示当前这一行以及向下 20 行直接的行号

ex 搜索模式

1:/pattern/d 删除下一个包含 pattern 的行
2:.,/pattern/d 删除当前行以及第一个包含 pattern 的行
3
4:100, +5 p 表示打印 当前行+5 到 100 行之间的内容
5:100;+5 p 打印 100-105 行之间的内容, 使用分号时候第一行地址会被当做当前光标的位置
6:/pattern;+10 p 显示包含 pattern 行的后十行内容
7
8:g/pattern 寻找文件中最后一次出现 pattern 的地方, g 表示全局, 可以让搜索模式显示并包含这个模式的所有行
9:g/pattern/p 寻找并显示所有包含 pattern 的行
10:g!/pattern/nu 寻找并显示不包含 pattern 的行, 并展示对应的行号
11:1,10g/pattern 寻找 1-10 行中包含 pattern 的行
12
13:1d | s/This/this 删除第一行, 并在当前行(原来的第二行)中替换 This 为 this
14ex 的保存于离开文件
15:w 将缓冲区内容写入到文件中, 但不离开
16:q 离开编辑器
17:wq 写入并离开,即使文件无任何修改也一样会写入
18:x 写入文件同时离开, 仅当有修改时才会写入
19:! 忽略警告, vi 会保护现有文件, 当需要将缓冲区内容写入到文件中会有警告产生
20
21:w newfile 将缓冲区内容写入到新的文件, 原有的文件不会改变
22:1,10w newfile 将缓冲区中 1-10 写入到新的文件
23:1,10w >> newfile 将缓冲区 1-10 行内容附加到新文件中
24
25:r newfle read 可简写为 r, 将新文件内容读出并插入到光标所在位置的下一行
26:2r newfile 将新文件内容插入到第 2 行之后
27:0r newfile 将新文件内容插入到文件开头
28vi 多文件编辑
29:n 跳转到下一个文件
30:first 跳转到第一个文件
31:last 跳转到最后一个文件
32
33:e filename 启动一个文件, 存在则打开, 不存在则新建, 可以 tab 补全
34:e # 回到上一个文件, 需要将缓冲区内容写入到文件
35
36:w %.new 写入到当前文件, % 表示当前文件的文件名
37
38ctrl-^ 效果同 :e # 切换到上一个文件
39
40"f6yy -> :w -> :e new.txt -> "fp ===> 复制光标以及后 6 行内容复制到缓冲区 f 中 -> 缓冲区写入到文件 -> 切换到 new.txt 文件 -> 复制缓冲区 f 中内容到光标后
41:1,6ya a -> :pu a ===> 拖拽 1-6 行到缓冲区 a -> 将缓冲区 a 中内容放置到当前光标之后, ya 为拖动命令,pu 为放置命令

全局替换

1:s/old/new substitute 可缩写为 s, 将当前这一行第一个出现模式 old 的字符串替换为 new, /用来分割各个命令, 最后一个/可省略
2:s/old/new/g 将当前这一行中所有的 old 替换为 new, g表示该行中所有模式, :g 表示文件中每一行
3:1,10s/old/new/g 将 1-10 行中所有的 old 替换为 new
4:%s/old/new/g 通 :1,$s/old/new/g , 将整个文件的 old 替换为 new
5:1,10s/old/new/gc 替换 1-10 行中所有的 old, 每一个都需要确认
6:g/pattern/s/old/new/g 遇到包含 pattern 的行时候将 old 替换为 new
7:g/pattern/s//new/g 遇到包含 pattern 的行将 pattern 替换为 new, 此时直接用 :%s/pattern/new/g 即可

搜索模式的元字符

1. 匹配任何单一字符, 包含空格, 除掉换行符
2* 匹配出位于此符号前的单一字符,该字符可以出现 0 到多个
3^ 表示后边的正则表达式必须位于行开头
4$ 表示正则表达式必须位于行结尾
5\ 转义字符, 例如 \. 表示匹配 . 而不是任意字符
6[] 匹配出方括号中任意一个字符, [^a-z] 则表示匹配不是小写字母的字符, [] 中的 ^ 表示取反
7\(\) 将\(\)之间模式匹配到的内容保留到缓冲区, 一般可以保留一行中 9 个模式, 例如 \(That\) or \(this\) 则将 That 保留到缓冲区 1, this 到 2
8\<\> 匹配某些字符开头的单词, 例如 \<ac 只会匹配出以 ac开头的单词, 而 ac\> 只会匹配出以 ac 结尾的单词
9~ 匹配任何上一次搜索所使用的正则表达式, 只能用于正则搜索, 即 /
10
11[:alnum:] 字母与数字字符
12[:alpha:] 字母字符
13[:blank:] 空格与指标符
14[:cnctrl:] 控制字符
15[:digit:] 数字字符
16[:graph:] 可打印的与可见的(不包括空格)字符, 不包括空白
17[:print:] 可打印的字符, 包括空白
18[:punct:] 标点符号
19[:space:] 空白字符
20[:upper:] 大写字符
21[:xdigit:] 十六进制数字
22
23\n 利用\(\)存储的第 n 个模式的文字做代换, n 表示数字 1-9, 之前存储的模式是从左到右来计算
24\ 将后面一个字符当做普通字符来看到
25& 用在替换字符串中时, 替换为搜索模式匹配出的完整模式, 例如 :%s/AAA/&, bbb 则替换字符串为 AAA, bbb
26\u 或 \l 使替换字符串下一个字符变为大写或小写
27\U 或 \L 或 \e 或\E 将后边的字符串或直到出现 \e 或 \E 为止, 全部替换为大写或者小写

:set 命令

1:set option 打开选项
2:set nooption 关闭选项
3
4:set ic 指定搜索模式忽略大小写
5:set noic 指定搜索模式区分大小写
6
7:set window=20 设置屏幕窗口显示的行数
8:set wrapmargin 设置右边界距离, 用于自动换行
9
10:set all 检查 vi 正在使用的选项
11:set option? 查询指定选项的当前值
12
13noignorecase 搜索时区分大小写
14wrapscan 回到文件开头继续搜索, 表示在文件中任何一处开始搜索, 都可以找到符合的文本
15magic 模式匹配时候辨识通配符
16autoindent 设置自动缩排, ctrl-t 下一层缩进, ctrl-d 上一层缩进
17shiftwith=4 设置默认向左或向右为 4 个空格
18tabstop 设置 tab 占用 4 个空格
19list 显示控制字符
20showmatch 显示对应匹配的括号, 插入模式会有效果
21mourse=a 多窗口下, 鼠标跟随

exrc 文件, 无需 : 即可, 因为读入 exrc 文件的是 ex 读入的

1主目录下的.exrc 文件中添加 set exrc 则 ex 可以读取当前目录下的.exrc 文件
2:so .otherexrc source 可缩写为 so, 加载其他的 exrc 文件

执行 unix 命令

:!command ! 会告诉 ex 创建一个shell, 且后续文本视为 uninx 命令 :!date 显示系统时间 :sh 创建一个 shell, 可以执行多个 uninx 命令, 结束时按 ctrl-d 回到 vi

:r !command read 可简写为 r, 可与 uninx 命令结合, 把 uninx命令的结果读入到文件中 :1r !date 将系统时间读入到文件第一行

:1,10 !sort 将 1-10 行排序 !)command 将下一句内容传递给 command

单词缩写, 插入模式定义宏

1ab mb Mobiuspace 设置 Mobiuspace 的缩写为 mb, 在 vi 中输入时会自动展开, 缩写的单词不能出现在所代表的词组的词尾
2命令缩写, 命令模式定义宏
3:map x sequence 定义字符 x 映射到编辑命令 sequence
4:unmap x 取消定义给 x 的编辑命令 sequence
5:map 列出所有被映射的字符
6
7:map v dwelp dw 删除一个单词, e 移到下一个单词结尾, l 向右移动一个空格, p 将删除的单词放置到新位置
8:map! - dw 命令模式下强制覆盖 - 为 dw 命令

使用 tag, uninx 有 ctags 命令可以与 vi 的:tag命令一起使用

1:ctags *.c 创建描述所有 c源代码文件的 tags 文件
2:tag name 在 tags 文件中寻找 name 的定义

vim 启动

1vim -d file1 file2 diff 缩写为 d, 以 diff 模式启动编辑文件
2vim -o file1 file2 所有文件均各自打开窗口

vim 多窗口编辑

1:split 水平分割当前窗口
2ctrl-w -> s 水平分割当前窗口
3:new 水平分割当前窗口, 会自动适配一些配置
4
5:vsplit 垂直分割当前窗口
6
7:[n]split [++opt] [cmd] [file] n 为 vim 指定新窗口显示的行数
8
9ctrl-w -> ctrl-j 移动到下一个窗口
10ctrl-w -> ctrl-k 移动到上一个窗口
11ctrl-w -> ctrl-h 移动到当前窗口左侧
12ctrl-w -> ctrl-l 移动到当前窗口右侧
13
14ctrl-w -> ctrl-p 移动到最后一次访问的窗口
15ctrl-w -> ctrl-t 移动到最左上角的窗口
16ctrl-w -> ctrl-b 移动到最右下角的窗口
17
18ctrl-w -> + 当前窗口增加一行
19:resize +2 当前窗口增加两行

vim 缓冲区命令

1:ls 列出缓冲区文件

More articles from Favori 重剑

碧血丹心

无论时光如何沾染风霜,也永似红日光

May 10th, 2022 · 1 min read

chrome V8 引擎中的垃圾回收机制

V8引擎就是nodejs的发动机

March 3rd, 2022 · 1 min read
© 2016–2023 Favori 重剑
Link to $https://github.com/yuanguandongLink to $https://favori.zcool.com.cn/Link to $https://codepen.io/favori