^
linux下安装docker并设置镜像代理 .sh
docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
vim 下一阶段 .md
vi
### 常用命令
* `s` 删除光标所在字符然后进行插入
* `S` 删除光标所在行再进行插入
* `cw` change当前位置到word末尾
* `fa` 查找a之后可以用`;`查找下一个`,`查找前一个
* `%` 括号移动
* `dfl` 删除到下一个l字符处
* `d$` 删除光标到本行末尾 类似的还有`c$`
* `.` 重复上一个操作的命令
* `ctrl+v` 块选中之后,`$` `^` 移动 | `I` 插入,`esc` 将重复每行执行
* `@@` 播放最新录制的宏
* `:%y` 复制整个文件

### normal
执行任意的普通模式命令

`:norm .` `:norm @a`, 可以在块/行选中下重复每行执行

### IDEA 相关
>[warning] vim 从入门到 idea?

>[success] 我只是给 vim 装了 idea 插件罢了(确信

keymap(或者通过ideaVim的:action配置)
- Refactor
	- Rename =>`Alt+R` 原来的`Shift+F6`太难按了
- Editor Tabs
    - Select Next Tab => `Alt+L`
    - Select Previous Tab => `Alt+H`
    - Close => `Alt+Q`
	- 配合 `gd` 和 `ctrl+o`、`shift+shift` 控制 tab

>[info] `Alt+J` 原生,选中下个相同字符串
周刊 2020-05.4 .md
>[info] :bookmark: 第一期,未来会持续分享些好的(博客)文章

- :books: [从零入门 K8s| 人人都能看懂 Pod 与容器设计模式](https://mp.weixin.qq.com/s?__biz=MzA4ODg0NDkzOA==&mid=2247488010&idx=1&sn=37e4a3bff67d5ce466685b646cbab279&chksm=9022adefa75524f9f63ddc98d05210958725b79ba9823ce0e87f8dee8740ee8c59d2ec5de321&mpshare=1&scene=23&srcid=&sharer_sharetime=1590577306539&sharer_shareid=566f67463343b4fd81bb4dbead932b25#rd)
- :seedling: [为什么 0.1 + 0.2 = 0.300000004](https://draveness.me/whys-the-design-floating-point-arithmetic/)
- :octocat: [[能不能好好说话]](https://github.com/itorr/nbnhhsh)
- :baby_chick: [中文互联网中“讨论”的消亡](https://www.gcores.com/articles/121924)
- :trophy: [高能分享之《优雅的编程者》](http://xiaorui.cc/archives/6643)
- :fish_cake: [《睡觉的笨蛋》:一个才华不够仍要坚持自我的故事](https://www.gcores.com/articles/120615)
- :maple_leaf: [环游中国341天后,这位湖北骑士被定格在了家乡外](https://www.yystv.cn/p/6233)
统计文件重复行 .sh
linux
sort test.txt | uniq -c | sort -rn
ヽ(✿゚▽゚)ノ .md
jojo,美少女战士
[#sailormoonredraw アしや(芦谷)耕平](https://twitter.com/asikoh009/status/1262059435012157440)

![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/ZxlbFrUFZNPpMdvIprdF.jpg)
prepare-commit-msg 提交信息附带分支名 .sh
git,hook
#!/bin/sh
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

if [ -z "$BRANCHES_TO_SKIP" ]; then
          BRANCHES_TO_SKIP=(master)
fi

BRANCH_NAME=$(git symbolic-ref --short HEAD)

BRANCH_EXCLUDED=$(printf "%s\n" "${BRANCHES_TO_SKIP[@]}" | grep -c "^$BRANCH_NAME$")
BRANCH_IN_COMMIT=$(grep -c "\[$BRANCH_NAME\]" $1)

if [ -n "$BRANCH_NAME" ] && ! [[ $BRANCH_EXCLUDED -eq 1 ]] && ! [[ $BRANCH_IN_COMMIT -ge 1 ]]; then
          sed -i.bak -e "1s/^/$BRANCH_NAME /" $COMMIT_MSG_FILE
fi
kenshi aqua .md
aqua
![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/olylErogvBWFgPYrVGel.jpg)
rabbit aqua .md
auqa
<https://twitter.com/umaiyo_puyoman/status/1260173067067637762>

![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/MHHIDoUdAkmqjaaEXJxD.jpg)
为什么凑dd总是这么喜欢玩jojo梗呢 .md
aqua
<https://t.bilibili.com/387839811738348211>

![](https://kicoe-blog.oss-cn-shanghai.aliyuncs.com/nvyUTjfaCHhZJVDQHDXp.jpg)
docker容器查看宿主机ip .sh
docker
/sbin/ip route|awk '/default/ { print $3 }'
ssh 端口转发 .sh
linux
ssh -N -L 3306:localhost:3306 root@xx.xx
读书 .md
《了不起的盖茨比》
>[book] All the bright,precious things fade so fast.And they don’t come back.
所有的光鲜靓丽都敌不过时间,并且一去不复返。
零宽断言 .md
regex,正则
顾名思义,零宽断言不占任何字符,仅用来断言

* `(?=)` 表示正向断言,true
* `(!=)` 表示负向断言,false

### 先行零宽断言

```
// 匹配ab后为或不为c,但c不会被该正则匹配
ab(?=c)
ab(?!c)
// 注意这里断言宽度为0,只断言这里是个a,然后匹配ab,才不是匹配aab
(?=a)ab
// 所以下面的正则是匹配不了任何字符串的
(?=b)ab
```

### 后发零宽断言

```
// 断言前面是个a,然后匹配之后的ab,也就是用来匹配aab里的ab
(?<=a)ab
// 用在markdown.js里的,匹配开头不为\转义的`code`
(?<!\\)(`+)([^`]|[^`].*?[^`])\1(?!`)
```

>[danger] 写好后才发现后发零宽负向断言只有chrome支持

只好改回以前的版本了

```
([^\\`]|^)(`+)([^`]|[^`].*?[^`])\2(?!`)
```