开发工具与文本处理
每天都在用、却很少弄清楚原理的工具与文本细节:Vim 的编辑语言和配置怎样加载,语言服务器为什么找不到头文件,Git 的暂存区到底存了什么;以及正则在不同语言里的差异、反斜杠的几层转义、一个字符串到底有多长。
从哪里开始:用 Vim 的读者从Vim 的编辑语言开始,后面几篇按配置加载、局部选项与脚本的顺序深入;处理文本的读者从一个表情是几个字符和同一个正则在三种语言里开始。
文章
01Vim 的编辑语言操作符 + 范围:dw、diw、daw 的差别,ci( 与计数,点号重复,删除覆盖寄存器,宏遇错停止与 :g,\v 与 \zs,argdo→02Vim 打开中文文件乱码fileencodings 的探测顺序:默认把 GBK 识别成 latin1,gbk 放在 utf-8 前把「你好」识别成 GBK;++enc、转换保存与 nobomb→03Vim 的配置与插件怎样加载runtimepath、plugin 与 after/plugin 的顺序;~/.vim/ftplugin 被系统 ftplugin 覆盖、after 才生效;autoload 按需加载、opt 包与 packadd→04Vim 的局部选项、quickfix 与 tagsset 与 setlocal、ftplugin 里写 set 的后果、Tab 相关的四个选项、errorformat 与无效条目、:grep 读磁盘、tags 的搜索模式与 ctags -a→05Vim 脚本的作用域与重复加载autocmd 每次 source 叠加一份、augroup、函数重定义规则、s: 与 b:、nmap 再解释、fnameescape、作业的 exitval→06语言服务器看到的编译上下文没有编译数据库找不到头文件、CMake 生成 compile_commands.json、构建改了宏而数据库陈旧时编辑器报 0 个错误→07硬换行、软折行与渲染gq 与 formatoptions 的 m、M、B,gq 破坏代码块,modeline 的限制,段落内换行在 Chromium 与 WebKit 里显示成空格→08工作区、暂存区与按块暂存add -p 与 diff --cached、暂存后再修改提交的是旧版本、插件的暂存与撤销、restore -p 与 reset --hard 丢掉了什么→09Mac 上的 GitHub SSH Key认证链路、钥匙串保存的其实是口令、多账号为什么认错人,以及按目录自动切换身份→10Postman 自动管理 Token集合级脚本、变量作用域、失败时让运行失败;Newman 实测两种写法的差异→11同一个正则在三种语言里Java、Python、JavaScript 实测:\d 与 \w 的范围、$ 与换行、整串匹配 API、命名分组与替换模板、split、忽略大小写、lastIndex→12反斜杠数了三遍源码字符串、正则、替换模板三层转义;用户输入的 $5 让 Java 抛异常、$& 在 JS 里被解释;替换参数传函数→13一个表情是几个字符UTF-16 单元、码点、UTF-8 字节与字形;截断留下孤立代理、反转把国旗变成另一个、规范化与大小写→