VSCode 基本操作

VS Code

基本操作

  • 命令面板:cmd + shift + p

    • Code Cli 的安装
  • 光标移动

    • 单词:option + 左右
    • 行:cmd + 左右
    • 代码块:cmd + shift + \ => 很关键
    • 文件:cmd + 上下
  • 文本选择 + shift

    • 单词:option + 左右 + shift
    • 行:cmd + 左右 + shift
  • 操作

    • 删除代码
      • 删除行
        • cmd + fn + delete 右侧所有代码
        • cmd + delete 左侧所有代码
      • 删除单词
        • option + fn + delete 右侧所有代码
        • option + delete 左侧所有代码
      • 删除当前行 cmd + shift + k
      • 剪切当前行 cmd + x
    • 移动一行代码:option + 上下
  • keyboard 查看键位绑定:cmd + k cmd + s

进阶操作

  • 代码格式化:format

    • option + shift + f
  • 排序:sort line ascending => cmd + shift + p

  • 多光标操作 => https://time.geekbang.org/column/article/40261

    • cmd + d => 选中左边第一个单词
    • 选中多行后,option + shift + i => 多行行尾添加光标

文件跳转

*    cmd + p => 最近的文件列表(或者查找文件)
    *    cmd + enter => 新窗口里打开 => **可以对比不同**
    *     打开以后发现它是可切换状态,因为你没有编辑,你可以手动 cmd + s 去固定这个标签页
    ![](media/15481297883580/15482156645261.jpg)

*    ctrl + tab 切换
*    cmd + option + 左右 => 浏览器里可以通用
  • 行跳转:ctrl + g => 在查看 git 冲突的时候 => vim 模式 :number

符号跳转

  • cmd + shift + o:跳转类(类似于大纲,在组件的功能了解中很方便)
  • cmd + t:跨文件查找调用方法的定义(比如查找接口调用的时候)

函数跳转

  • cmd + f12:跳转方法实现
  • f12: 跳转方法定义
  • shift + f12:查看方法调用

    • space 打开
  • f2:快速修改方法/函数名(相关的调用/定义)

  • cmd + option + [/] => 代码折叠,看代码逻辑的时候特别好用,和 cmd + shift + 左右 都特别适合看代码

  • cmd + k -> cmd + 0 => 折叠文件
    • cmd + k -> cmd + j

自动补全、快速修复、重构 => https://time.geekbang.org/column/article/40847

代码折叠、小地图、面包屑

面包屑 => 可能有人更喜欢这个而不是文件资源管理器

  • 打开面包屑 cmd + shift + .
  • option + 左/右 => 切换层级

极速搜索

  • cmd + f:自动选中当前光标所在的单词
  • cmd + g:搜索,但是光标仍在编辑区

大小写敏感,全单词匹配、正则匹配

替换:cmd + option + f

全局查找

  • cmd + shift + f 查找
  • cmd + 下 切换到相应搜索结果
  • o 打开搜索列表

查找/定位

  • cmd + f
    • enter => 下一个
    • shift + enter => 上一个

切换工作区

  • cmd + shift + e => 文件资源管理器
  • cmd + shift + x => 插件管理
  • ctrl + shift + g => 源代码管理

右击工作区即可

切换窗口

支持多工作区模式,但是更支持多窗口,一个工作区对应一个窗口

  • ctrl + w => 切换多窗口

markdown 预览

cmd + k 、v

查找键位绑定 keyboard

  • 录制按钮

编辑器配置

  • 垂直标尺 => “editor.rulers”: [120] => 120字符
  • 缩进参考线 => “editor.renderIndentGuides”: true
  • lineNumber
  • 空格处填充符号 => “editor.renderWhitespace”: “boundary”
  • 左侧行号也添加了背景号 => “editor.renderLineHighlight”: “all”

其它配置

  • tabSize、lineHeight、autoSave/autoSaveDelay
  • terminal.integrated.shell.osx: zsh
  • “files.exclude”: { “**/node_modules”: true } => 加快编辑器运行速度

悬浮注解

编辑器管理

窗口管理

  • cmd + \ => 打开新窗口
    • cmd + 1/2/3 => 切换窗口
    • cmd + option + 0(数字) => 切换布局方向(垂直/水平)

Tab 管理

  • ctrl + tab
  • option + cmd + 左/右
  • cmd + p

视图切换

  • cmd + B => 左侧边栏的展示/隐藏
  • zen => 只留下代码
  • cmd + j => 查看 code spell check 的报错

插件篇

BASIC

  • code spell checker:检查单词拼写错误
  • Bracket Pair Colorizer:彩色的括号
  • Document This:为 function、class 等自动生成文档
  • Gitlens:Git 集成工具
    • 当前行展示 git blame 信息
  • Material Icon Theme/vscode-icons:文件夹icon的多样性
  • TODO Highlight:List TODO list

  • Vim:

  • vscode-fileheader:ctrl + option + i 生成新文件的文档 => 孙悟空到此一游
  • Path Intellisense:补全文件路径名
  • Faker:生产 fake name => 就像名字一样废…

ADDITIONS

  • pigment:可以直接看到当前的色彩
  • settings sync:generate key => 保存到 gists 上
  • project manager => 保存以后很方便可以切换(打开的/未打开的)工程
  • live share => 登录就可以修改别人的工程文件,而不需要拉代码

  • .vscode 中添加 recommendations => vscode 会提示安装

mac note 的使用

  • ctrl + shift + tab 或者 ctrl + tab

浏览器

  • f12 调出来控制台
  • debugger 控制台
    • f8、f10、f11
    • esc:source debugger 的时候可以调出 console 控制台
  • cmd + shift + n 打开隐身窗口
  • shift + w => 在新的窗口打开浏览页

插件

  • vimium
    • j、k 上下挪动页面
    • yy:复制当前 url
    • p/P:当前剪贴板的 url 复制到地址栏
    • o/O:打开bookMark、收藏栏、历史记录中的页面
    • T:查找当前打开的 tab
    • r:reload page
    • shift + ? 查看快捷键
    • 查找模式
      • /xxx:查找 xxx
      • n/N:上/下一个

其它插件

  • 有道划词/网易有道词典鼠标取词:查询方便,划词翻译快速
  • 二维码生成
  • great suspender
  • 各种 devtools:redux、MobX、vue、React
  • Github 相关的文件管理侧边栏

iTerm 2 使用

  • 选择文本: cmd + f搜索 + tab选中文本,会自动添加到剪切板,使用cmd + v即可使用
  • 临时调用iterm: 通过hotkey的设置 => shift + space => 可以尝试使用cal看今天是周几,不过使用台历也没有问题
  • 命令行标记: cmd + shift + m可以为某一行(或者说某一屏幕添加标记),之后可以使用cmd + shift + j跳回这里
    • 比如一些安装步骤或者看到日志需要对比的时候可以打标记
  • 剪贴板历史: cmd + shift + h可以查看(iterm)剪贴板历史纪录
  • 查看操作历史(快照): cmd + option + B可以查看之前一段时间内的操作的快照(阴险)

  • option + b、option + f
  • iTerm2

      1. 分窗口操作:shift+command+d(横向)command+d(竖向)
      • cmd + opt + 方向键: 切换窗口内的面板
      1. 查找和粘贴:command+f,呼出查找功能,tab 键选中找到的文本,option+enter 粘贴
      1. 全屏快捷键是 cmd+enter 而不是默认的 ctrl+cmd+f
  • cmd + k 清屏

  • cmd + r 刷新屏幕(上面的记录会保留)

切换显示器

因为没有别的切换快捷键,所以可以通过 alfred/spotlight 来实现,所以需要保留一个功能,不要在不同显示屏打开同一个应用,这会导致切换的问题

  • 注意,ctrl + 左/右 只会切换鼠标所在位置的屏幕,所以需要使用别的方式切换打开了多个窗口的应用
    • vscode: ctrl + w
    • chrome: vimium 插件的 T

MAC 常用快捷键

  • ctrl + cmd + f => toggle full screen
  • cmd + m => 最小化窗口
  • ctrl + 方向 => switch screen
  • ctrl + 上 => list screens
  • cmd + tab => switch apps 可以使用 alfred/spotlight 替代
  • cmd + option + esc => 强制关闭程序

终端常用快捷键(https://www.cnblogs.com/mangosoft/p/6375266.html)

  • ls
  • mkdir、cd、cp、mv、rm、pwd
  • history、ctrl + r
  • env => 配置环境时需要
  • cat、find、head/tail、diff(在进行一些实验的时候,可以用来对比实验结果)
  • wc:看代码量(行、词、字母)
  • ps、kill
  • du -h 1

其它电脑配置

vim

参看:

其它链接

zsh 插件

VIM

  • zM/zR => 全文折叠/展开
  • zc/zo: 代码块折叠/展开
  • 多级折叠

农药攻略

常见术语

  • AP / APC,AD / ADC
  • 行为:打野/反蓝/反红、gank/游走/埋伏、清兵/推线、推塔/偷塔
  • NPC:暴君/主宰(大小龙)、野怪(小野/红蓝怪/螃蟹)、炮车、近战兵/远程兵/超级兵
  • 角色分类:射手、法师、刺客、战士/突进、辅助
  • 位置分类:上单、中单、射手(下路)、打野、辅助/自由人 => 分别介绍玩法
  • 建筑:高地、水晶、防御塔(一塔/二塔/高地塔)、泉水
  • 地形:墙壁、草丛
  • 兵线 / 控线 => 技巧
  • 经济面板

机制

  • 恢复自身状态
    • 一塔前的回血包
    • 自带的恢复技能
    • 部分英雄的技能 => 亚瑟、铠被动回血,扁鹊、蔡文姬加血技能 => 出 制裁/梦魇 针对
    • 部分装备 => 圣杯、噬神;进化水晶、霸者;吸血之镰(末世/泣血/制裁);提神水晶、炼金护符
  • 刷兵
    • 3个近战一个远程,一波兵到2级
    • 第七波出现炮车,这个时候安琪拉一波技能收不完,需要加普攻
  • 刷野
    • 第一波野全收升4级,比线上所有人都快
    • 射手拿一红,可以配合辅助杀人
    • 阵容强势,可以一级反蓝
    • 一个人可以反蓝概率高的:钟馗、猴子、韩信
    • 反反蓝技巧:打野进草丛 => 配图,惩戒最后一格血用
  • 杀人
    • 一血 300
    • 人头初始值 200
      • 被杀者每死一次都会减钱,但期间杀一次人就恢复 200 初始值
      • 杀人者每杀一次人都会加钱,但只要期间死一次,就恢复 200 初始值
    • 助攻:是杀人者的一半。多人则均分
  • 补兵
    • 远程 36,10分钟后达到最大值 54
    • 近战 54,10分钟后达到最大值 81
    • 炮车 93,10分钟后达到最大值 140
    • 超兵和炮车一样
    • 主宰/暴君:117
    • 若小兵不是自己打的,则只能得到 77% 经济
    • 队友在身边会分享经验和经济
  • 技能加点 => 可下载《王者荣耀助手》
    • 甄姬加点:主二副一,有大点大 => 一技能需要预判容易放空,二技能只要弹到两次,伤害就高于一技能,而且可以叠加两次标记,配合被动容易杀人
    • 安琪拉:主二副一,有大点大 => 二技能虽然需要预判,但是升级可以减冷却,而且有持续伤害,配合被动后,总和远高于一技能,并且可以在二技能打到对方身上时多加两次普攻
    • 嬴政:主二副一,有大点大 => 升级二技能可以增加法强,减少冷却,增加移速,增加生存能力和输出,而一技能更多只能打到敌方一次,起到减速效果,升级意义不大
    • 庄周:主二副一,有大点大 => 二技能升级减 CD,而且叠加伤害增加,配合被动将成为庄周的主要伤害输出,一技能主要提供减速和远程消耗
      • 一级的时候看情况加,出门可以留技能点,如果对面射手和辅助在打红,没有第一时间上线,那么可以学二技能清兵,清完一波就有一技能了,趁这个时候还可以打一波螃蟹

战前准备

  • 合适的快捷信息,举例说明何时使用 => 推荐清单
  • 认识不同的英雄,技能,以及定位,并且选择合适的出装:举例说明(打野,劣单,中单,辅助,射手)
  • 合适的铭文 => 吐槽:没钱的同学可以选择“通用铭文”( AP 出 冷却>法强>法吸>法穿, AD 出 攻击>物吸>暴击>攻速>物穿,辅助出生命+法防/物防+回血)

战斗过程

  • 小地图
    • 发信号

各个位置的玩法

  • 中单
    • 英雄技巧
      • 安琪拉可以越兵线放技能压人,只要2技能打到,对面不死也要脱层皮
      • 甄姬的话主要是看对面位置,看到对面要上来补兵的时候,放2技能,两次2技能对面就会被冻住,接上1技能再加两次普攻可以单杀
      • 周瑜,不好杀人,但是可以防火加吹风,把兵线压进塔内,对面不好补刀,并且能够对塔造成伤害
    • 时刻注意刺客和辅助的游走,一般看到打野的队友快清完野的时候,对面应该也清完并且升到4级准备杀人了(这时候可以看看经济面板,看对面的等级和装备)
  • 上单

    • 对面一般会拿一红,抢时间清掉第一波小兵和螃蟹,然后猥琐呆在草丛里吃经验就好,尽量别用技能,因为兵线过去自己反而没法吃经验
    • 尽量别死,死了对方射手就可以拿塔,辅助就可以游走中路,打野就会入侵己方野区 => 配图
    • 现在边路都要有一定带线抗压能力,对面如果只有射手你要有一定能力可以威胁对方,比如花木兰、铠、庄周都有前期单杀能力,吕布、宫本四级可以强杀对面
  • 射手

    • 自私点拿一红,可以配合辅助杀死对面下单,然后拿塔,蹲草丛,等对方回来再杀一次,然后入侵对面野区,线野全清,经济爆炸
    • 带闪现,方便逃跑
    • hit and run,尤其是后羿,走一步A一下,粘死对方
    • 逆风时线上不好混,可以出把打野刀补经济
    • 尚香这种缺蓝的可以出个炼金护符补蓝
  • 辅助

    • 配合射手拿红,快死时,赶紧去线上,可以来得及第一个小兵,否则就会损失54金币和部分经验
    • 有一定控制技时,可以躲在左侧草丛阴人(钟馗、钟无艳,庄周等),不要一直打小兵,抢了射手钱还杀不死对方
    • 看情况到左侧草丛,防止中路和对方打野来人 gank
    • 辅助更多的是躲在草丛或是探索草丛,为队友做视野,替队友档刀
  • 打野

    • 先拿蓝buff,拿了以后升2级,有两个技能,并且cd短,可以迅速清掉其它野
    • 出打野刀,效率高,经验多
    • 带惩戒,升级打野刀后可以补一手控制,而且有时候可以反红反蓝
    • 如果对面没有拿红,可以看情况gank射手,假如拿了,果断继续清掉下路野,然后gank下路
    • 打野经常都是脆皮,尽量别从正面上,抄后路、走草丛、蹲野点,怎么猥琐怎么来
    • 一般选择gank目标是脆皮法师、射手、刺客
    • 节奏很重要,假如没有好机会就继续发育,经济一旦落下就废了
    • 逆风时,注意掌握己方野区,否则对面可以偷蓝,然后包上中路队友,偷红也是一样
    • 顺风时,可以入侵对面野区,压制对面打野、射手经济,并且看情况收线偷塔

其它

  • 兵线很重要,尽量选可以带线逃跑的英雄,偷着偷着就赢了。
  • 一切皆有可能,经常是中路一波团灭就可以反推对面了,所以顺逆风都要注意
  • 主宰/暴君的控制
    • 小地图可以看到对面是否在打主宰/暴君
    • 假如对面都不在线上了,不是抱团埋伏,就是打暴君了
    • 打暴君的最好时机
      • 对面都在小地图上露面了,并且在最远的一条兵线上
      • 打了对面一波团灭,推了一波高地塔,对面马上就要活了,己方小兵没到或状态不好的时候,可以去打暴君,不行就清野,实行三光政策

浏览器的 Cache 机制研究

测试过程

  • 打开网页可以发现图都是 from memory cache 方式获取的,另外还有一些 from disk cache 的则是浏览器插件的 js 和 css 文件

  • 按照网上说的(StackOverflow: Using tags to turn off caching in all browsers)),添加了清除缓存语句,然而图片还是 from memory cache,说明图片的缓存并不受 meta 控制

    1
    2
    3
    4
    5
    <meta http-equiv="cache-control" content="max-age=0" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="expires" content="0" />
    <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
    <meta http-equiv="pragma" content="no-cache" />
1
2
3
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
  • 在 Chrome 浏览器下,可以通过 chrome://cache 地址来查看当前 chrome 缓存的文件

  • 发现工程中的文件有时候是 from disk cache,有时候是 from memory cache

  • 加入了以下语句以后,清除缓存加刷新页面,ubt 文件加载了一次以后还是会显示 from disk cache,说明语句并没有起作用

相关链接

日本行政区划

两级行政区划

  • 都、道、府、县(广域地方公共团体):东京都,北海道,大阪府,京都府, 43县。其办事机构称为“厅”,即“都厅”、“道厅”、“府厅”、“县厅”,行政长官称为“知事”

  • 市、町、村(基础地方公共团体):其办事机构称“役所”,即“市役所”、“町役所”、“村役所”,行政长官称为“市长”、“町长”、“村长”。其中,町相当于中国的镇。

八个地区

根据地理位置,又可分为八个地区:北海道地方,东北地方,关东地方,中部地方,近畿地方,中国地方,四国地方,九州及冲绳地方

日本行政区划图

Markdown语法学习

备注: 待完成,从开头到”图片大小”部分尚未处理

语法总结

  • 段落与换行:

    • 行尾多加两个空格,就可以换行
    • <br>
  • 标题:

    • #标题1

    • 标题2

    • 标题2
      -

  • 引用:

    • 单行引用

    • 单行引用

    • 嵌套引用

      嵌套嵌套

    • 引用中使用 markdown 语法

  • 列表:

    • 无序列表

      • 第一项
      • 第二项
      • 第三项
    • 有序列表

      1. 有序列表以数字.为首
      2. 数字的序列并不会影响生成的列表序列:
      3. 比如这样
      4. 也可以转义来取消序列的作用
        6.
  • 代码

    • 代码块


      蓝色的代码

    • 内嵌代码: <title>Markdown</title>

  • 分割线




  • 超链接:

    [Google]: http://www.google.com/ “Google”

  • 图片:

    • 行内式

      1
      ![GitHub](https://avatars2.githubusercontent.com/u/3265208?v=3&s=100 "GitHub,Social Coding")

      GitHub

    • 参考式

      1
      2
      3
      // 注: hexo 中出不来结果
      ![GitHub][github]
      [github]: https://avatars2.githubusercontent.com/u/3265208?v=3&s=100 "GitHub,Social Coding"
    ![GitHub][github]
    [github]: https://avatars2.githubusercontent.com/u/3265208?v=3&s=100 "GitHub,Social Coding"

*    图片大小:

    
1
<img src="https://avatars2.githubusercontent.com/u/3265208?v=3&s=100" alt="GitHub" title="GitHub,Social Coding" width="200" height="200" />
<img src="https://avatars2.githubusercontent.com/u/3265208?v=3&s=100" alt="GitHub" title="GitHub,Social Coding" width="200" height="200" />
  • 强调

    • 斜体 or _斜体_

      1
      *斜体* or _斜体_
    • 粗体 or 粗体

      1
      **粗体** or __粗体__
  • 扩展语法

    • 语法高亮

      1
      2
      3
      4
      5
      6
      // 用法
      ```js
      window.addEventListener('load', function(){
      console.log('window loaded');
      })
      ```
      1
      2
      3
      4
      // 结果
      window.addEventListener('load', function(){
      console.log('window loaded');
      })
    • 表格:

      • | 区分单元格
      • - 分隔表头和其它行
      • 用法

        1
        2
        3
        4
        5
        | 链接 | 结果 | 原因 |
        |-----|---|----------|
        |文本内容| **`是`** |同协议同域名同端口|
        |文本内容| **`是`** |同协议同域名同端口|
        |文本内容| **`是`** |同协议同域名同端口|
      • 结果

链接 结果 原因
文本内容 同协议同域名同端口
文本内容 同协议同域名同端口
文本内容 同协议同域名同端口

注意问题

  • 想要引用反引号(`)的时候,使用多个反引号将其括起来(注意包括的反引号和内容中的反引号不能是连续的,需要用空格隔开),如`` ` ``

正则表达式学习

测试工具

JavaScript 中的用法

  • replace方法: stringObject.replace(regexp,replacement)

    • replacement 参数
      • $1、$2、...、$99: 与 regexp 中的第 1 到第 99 个子表达式相匹配的文本
      • $&: 与 regexp 相匹配的子串。
      • $`: 位于匹配子串左侧的文本。
      • $': 位于匹配子串右侧的文本。
      • %: 直接量符号。
    • 例子

      1
      2
      3
      // 替换两个名字的顺序
      name = "Doe, John";
      name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");

RegExp 对象

  • 修饰符
    • i: 执行对大小写不敏感的匹配 => /[a-z]/i 匹配a-z,A-Z
    • g: 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)=> /[a-z]/g
    • m: 执行多行匹配

普通语法

  • 例子

    • 0\d{2}-\d{8} 匹配 010-88888888 这类的电话
    • ^\d{5,12}$ 填写的 QQ 号必须为 5 位到 12 位数字时
    • \ba\w*\b 匹配以字母 a 开头的单词
    • \(?0\d{2}[) -]?\d{8} 匹配几种格式的电话:
      (010)88886666,或 022-22334455,或 02912345678
    • ((2([0-4]\d|5[0-5])|1?\d{1,2})\.){3}(2([0-4]\d|5[0-5])|1?\d{1,2}) 匹配 IP 地址
    • \b(\w+)\b\s+\1\b 可以用来匹配重复的单词,像 go go, 或者 kitty kitty
    • \b(?<Word>\w+)\b\s+\k<Word>\b 也可以
    • url 解析 的例子:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      function parseUrl(url){
      var urlPattern = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;
      var result = urlPattern.exec(url);
      var type = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'];

      return result;
      }

      parseUrl("http://tool.oschina.net:80/regex?haha=true#fragment");
      // ["http://tool.oschina.net:80/regex?haha=true#fragment", "http", "//", "tool.oschina.net", "80", "regex", "haha=true", "fragment"]
  • 元字符

    • \w 匹配 字符、数字、下划线、汉字 等
    • \d 匹配数字
    • \s 匹配任意的空白符:空格,制表,换行,中文全角空格等
    • . 匹配除换行符(结束符)以外的任意字符
  • 位置匹配:

    • ^:”字符串”的开始
    • $:”字符串”的结束
    • \b: 表示一个位置 => 其前一个和后一个字符不全是 \w
  • 重复匹配:限定符

    • * 重复零次或更多次
    • + 重复一次或更多次
    • ? 重复零次或一次
    • {n} 重复n次
    • {n,} 重复n次或更多次
    • {n,m} 重复n到m次
  • 元素集:[] 里面表示一个范围

    • [aeiou] 匹配英文元音字母
    • [0-9] 匹配数字,即\d
    • [0-9a-zA-Z] 匹配数字和字母
  • 分支条件:| 把几种不同的规则分隔开(按顺序匹配)

    • 0\d{2}-\d{8}|0\d{3}-\d{7} 这个表达式能匹配两种以连字号分隔的电话号码:一种是三位区号,8 位本地号(010-12345678),一种是4位区号,7位本地号(0376-2233445)。
  • 分组:可以用小括号来指定子表达式(也叫做分组)

    • (\d{1,3}\.){3}\d{1,3} 是一个简单的 IP 地址匹配表达式
  • 反义:

    • \W 匹配任意不是字母,数字,下划线,汉字的字符
    • \S 匹配任意不是空白符的字符
    • \D 匹配任意非数字的字符
    • \B 匹配不是单词开头或结束的位置
    • [^x] 匹配 除了 x 以外 的任意字符
    • [^aeiou] 匹配除了 aeiou 这几个字母以外的任意字符
  • 后向引用(分组):使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个分组会自动拥有一个组号,规则是: 从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2

    • \1: 代表分组1匹配的文本
    • 捕获
      • (exp) 匹配 exp,并捕获文本到自动命名的组里
      • (?<name>exp) 匹配 exp,并捕获文本到名称为 name 的组里,也可以写成 (?'name'exp)
      • (?:exp) 匹配 exp,不捕获匹配的文本,也不给此分组分配组号
  • 零宽断言(匹配位置!):用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言

    • (?=exp) 零宽度正预测先行断言,断言自身出现的位置的后面能匹配表达式 exp,也就是匹配 exp 前面的位置
      • \b\w+(?=ing\b) 匹配以 ing 结尾的单词的前面部分(除了 ing 以外的部分)
    • (?<=exp) 零宽度正回顾后发断言,匹配 exp 后面的位置
    • (?!exp) 匹配后面跟的不是 exp 的位置
    • (?<!exp) 匹配前面不是 exp 的位置
  • 匹配优先级:

    • 最先开始的匹配拥有最高优先级 —— The match that begins earliest wins
    • 贪婪:当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符
    • 转化为懒惰匹配模式:要在限定符后面加上一个问号 ?
  • 需要转义的字符要注意

    • \/: 避免误认为是 正则表达式的结束符
    • \?: 避免误认为是 非捕获匹配符或是限定符
    • \.: 避免误认为是 任意匹配元字符
  • 练习:

    • 匹配数字: /^-?$/

Github Pages + Hexo 写博客

相关链接

本人博客地址

配置环境

Github Pages Prjoect 搭建

Hexo配置

安装

  • 安装 Node 环境: https://hexo.io/docs/index.html#Install-Node-js

    • curl https://raw.github.com/creationix/nvm/master/install.sh | sh
    • 或者使用 nvm : nvm install 4
  • 安装 Git 环境: https://hexo.io/docs/index.html#Install-Git

    • 使用 homebrew: brew install git
    • 使用 macports: port instal git
  • 安装 hexo (使用 npm 安装):npm install -g hexo-cli

  • 安装 hexo-deployer-git => 可以发布 hexo 到相应的 git rep 上: npm install hexo-deployer-git --save

自定义配置

  • 修改 _config.yml 文件:

    1
    2
    3
    4
    5
    // _config.xml
    deploy:
    type: git
    repo: [email protected]:HopeLyn/hopelyn.github.com.git
    branch: master
  • ./public 文件夹下添加 CNAME 文件,并写下需要重定向的域名

    1
    2
    // CNAME
    blog.hopeleft.com
  • 修改 theme

    • 下载主题到 ./themes 文件夹下

      1
      2
      3
      4
      5
      // 安装 Next 主题
      git clone https://github.com/iissnan/hexo-theme-next themes/next

      // 或者安装 yilia 主题
      git clone https://github.com/litten/hexo-theme-yilia.git themes/yilia
    • 修改 _config.yml 文件

      1
      2
      // #theme: next
      theme: yilia
  • sitemap:

    • 普通的 sitemap 插件

      • 安装

        1
        npm install hexo-generator-sitemap --save
      • 修改 _config.xml

        1
        2
        3
        // _config.xml
        sitemap:
        path: sitemap.xml
    • baidu-sitemap 插件

      • 安装

        1
        npm install hexo-generator-baidu-sitemap --save
      • 修改 _config.xml

        1
        2
        3
        // _config.xml
        baidusitemap:
        path: baidusitemap.xml
  • 生成 RSS:

    • 安装插件: npm install hexo-generator-feed --save
    • 修改设置:

      1
      2
      3
      4
      5
      // _config.xml
      feed:
      type: atom
      path: atom.xml
      limit: 20
  • yilia主题的自定义配置

    • language: 在主目录下的 _config.yml 中修改

      1
      language: zh-Hans #简体中文

使用方法

  • 新建文章: hexo new 'My Post Name' => 就会在 ./source/_posts 下新建一个 My Post Name.md 文件

  • 通过 hexo d -generate 生成 html 文件(在 public 文件夹下),并发布到 github 上

  • hexo s: 启动本地服务,方便调整和配置

写文章方法

  • 文章的头部

    • hexo new 'My Post Name'命令新建文章的话会自动生成开头,如下所示

      1
      2
      3
      4
      5
      ---
      title: Github Pages + Hexo 写博客
      date: 2016-04-09 16:11:31
      tags:
      ---
  • 文章的主体

    • 基本按照 Markdown 语法
    • 注意事项

      • 在写副标题的时候,需要在## 和标题名中间留下空格,如 ## 使用方法,否则会显示 ##使用方法 在页面上,而不转义
      • 在写列表时(如下所示),多余的空行有时会导致语义上的误解,比如将其当作是引用的换行符

        1
        2
        *  这是第一个列表
        * 这是第二个列表

常见问题

  • WARN No layout: index.html: 当使用 git 来保存 hexo 文件夹时,因为 yilia 和 next 是单独的 git project,所以当你换电脑,或者重新 clone 这个工程时,yilia 和 next 只剩下空的文件夹

    • 解决方法一: 重新拉取 => 但是当你用 git 管理 hexo 项目的时候,这些主题并不会 push 上去

      1
      2
      git clone https://github.com/litten/hexo-theme-yilia.git themes/yilia
      git clone https://github.com/iissnan/hexo-theme-next.git themes/next
    • 解决方法二: 通过 git subtree 来管理

      1
      2
      3
      4
      5
      6
      7
      8
      // 新建一个指向远程仓库的 remote 
      git remote add yilia https://github.com/litten/hexo-theme-yilia.git

      // 在指定路径下建立 subtree,并同步代码
      git subtree add —-prefix=themes/yilia/ yilia master

      // 或者直接建立
      git subtree add --prefix=themes/next --squash https://github.com/iissnan/hexo-theme-next.git master