vim 插件管理和配置升级
作者:nunumick 发布时间:18 May 2023 分类: developer
因为使用 vscode vim 模式较多的缘故,有很长一段时间冷落了 vim 本体。然而近期工作中深感 vscode 占用内存过多,又想起 vim 的好。于是工欲善其事必先利其器,经过一番插件梳理和配置更新,完成了全新 vim 的更替,主要包括:
- 使用 vim-plug 替换 vundle 管理插件
- 引入 coc.vim 支持 typescript 智能补全等高级功能
- 引入 ack.vim,支持全局搜索
- 优化配置文件,确保 mvim gui 与 terminal 中表现一致
插件管理
替换了原来的 vundle 插件系统,精简插件列表,只保留必须的。这里为了体验 code copilot 也引入了 openai 插件。
" Plug Mode
call plug#begin()
" The default plugin directory will be as follows:
" - Vim (Linux/macOS): '~/.vim/plugged'
" - Vim (Windows): '~/vimfiles/plugged'
" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'
" You can specify a custom plugin directory by passing it as the argument
" - e.g. `call plug#begin('~/.vim/plugged')`
" - Avoid using standard Vim directory names like 'plugin'
"editor addons
Plug 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'} "statusline
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/nerdcommenter'
Plug 'Lokaltog/vim-easymotion'
Plug 'mileszs/ack.vim'
Plug 'kien/ctrlp.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'yegappan/mru'
Plug 'airblade/vim-rooter'
"code addons
Plug 'pangloss/vim-javascript'
Plug 'leafgarland/typescript-vim'
Plug 'maxmellon/vim-jsx-pretty'
Plug 'ap/vim-css-color'
Plug 'cakebaker/scss-syntax.vim'
Plug 'rakr/vim-one'
"labs
" ./install.sh script will automatically install openai-python
Plug 'madox2/vim-ai', { 'do': './install.sh' }
call plug#end()
小学阶段育儿体会,如何成为更好的父母
作者:nunumick 发布时间:14 Feb 2023 分类: life
再过一段时间,女儿琪琪就六年级了,马上就将结束小学的学习阶段,踏上新的征程。作为父亲,一路看着她从一个小小的模样渐渐长大、渐渐成熟、懂事、独立自主,一路相互陪伴,在感受时光荏苒的同时,又甚感温暖和欣慰。每个孩子都是父母的宝贝,说起对孩子的教育,相信每个家庭都会有一套自己的方法,我们也是一样。
父母是孩子第一任老师,回想初为人父的感受,除了喜悦和幸福之外,也是惶恐的,毕竟作为新手,不知道如何做好爸爸/妈妈的角色,这种感受直到现在都还会有,因此也会经常去补充育儿方面的知识,但很难说有一成不变的、必定成功的教育方法,因为每个孩子都是独立的个体,阶段不同、所处环境不同,对待孩子教育的方法也会不一样,我们好像一直是在矛盾中、错误中不断修正自己,努力做好父母的角色。这当中有自认为做的好的,也有做的相当糟糕之处。与其说是育儿心得,不如说是一些我们与孩子在共同成长的过程中真实的经历、总结与感悟。
陪伴的重要性
最初,我们是典型的三口之家结构。由于工作的原因,我和她的妈妈都没有太多的时间与精力去照顾琪琪。在上幼儿园前的几年里,琪琪大部分时间是在老家度过,由爷爷奶奶或外公外婆共同抚养。在熬过了这段艰难的时光之后,我们把她接到杭州共同生活,外婆也一同过来帮忙负责起我们的生活起居。在琪琪8岁的时候,收获了她的弟弟:球球。

树莓派基础运维小记
作者:nunumick 发布时间:12 May 2020 分类: developer
朋友送了一个树莓派设备,正好最近在捣鼓 homebridge ,可以用这块微型计算机做智家互联的本地中心服务。
安装
树莓派系统的安装参照文档进行就可以了,需额外配置一张 MicroSD 卡作为系统盘。由于我的机型 3B+ 系统内存只有 1GB,建议安装的是 32 位操作系统。系统准备好之后在 /boot 目录下创建 ssh 文件开启 ssh 服务。
# 默认用户: pi
# 默认密码: raspberry
ssh pi@ip_address
密码一定要改,本机 ip 也可以用以下命令查看
hostname -I
可以选择开启 WIFI,配置文件如下
# 配置文件
pi@raspberrypi:~ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
# /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=CN
network={
ssid="wifi-ssid"
scan_ssid=1
psk="wifi-pwd"
key_mgmt=WPA-PSK
}
# test
pi@raspberrypi:~ $ ifconfig wlan0
标签:
raspberry
,
homebridge
,
linux
<<< EOF
JS 异步编程之四:理解异步函数(AsyncFunction)
作者:nunumick 发布时间:10 Sep 2017 分类: front-end
有了前序内容的了解,再来看 async 函数和 await 关键字,会更容易理解他们的本质。
官方 demo 代码:
/**
* case from mdn
*/
function resolveAfter2Seconds(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
const x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();
新的武器
使用 async & await 处理之前的代码,替换 generator 和 yield,async 函数等价于自带 co 执行器的 generator 函数。
标签:
javascript
,
es2017
,
async
,
await
<<< EOF
JS 异步编程之三:理解 Co.js
作者:nunumick 发布时间:05 Aug 2017 分类: front-end
Co.js 是 TJ 大神基于 Generator 特性写的 js 库,可以用同步的方式编写和执行异步函数,核心代码只有几十行。
其本质上就是一个迭代器的执行函数,来看下面个人仿制的简写代码,理解精髓即可:
// 定义一个生成器,包含我们要用到的异步函数
const gen = function* () {
let a = yield new Promise((resolve, reject) => {
setTimeout(() => {
resolve(10);
}, 1000);
});
let b = yield new Promise((resolve, reject) => {
setTimeout(() => {
resolve(20);
}, 2000);
});
let c = yield new Promise((resolve, reject) => {
setTimeout(() => {
resolve(15);
}, 1000);
});
let d = yield 5;
let e = a + b + c + d;
console.log(e);
return e;
};
//编写一个递归执行的通用迭代器执行函数
//第一个入参为要执行的生成器,第二入参为 next 赋值
const iter = function (gen, value) {
let item = gen.next(value);
let v = item.value;
console.log(item);
if (item.done) return Promise.resolve(v);
//这一步很关键,如果是异步函数,则返回v.then
if (v instanceof Promise) {
return v.then((res) => {
return iter(gen, res);
});
} else {
console.log(v);
return iter(gen, v);
}
};
//co就是对执行器的再一次包装
const co = function (gen) {
let g = gen();
return iter(g);
};
//test
co(gen).then((res)=>{
console.log(res);
})
用 co 重写代码
有了这个可重用的便捷的 co 执行器,我们可以用它来重写上一篇理解生成器(generator) 文中的样例代码,替换掉手动逐行执行的那部分。
标签:
javascript
,
co
<<< EOF