0%

debian当前源内的clang版本为3.8,backport源里的版本为6.0

设置默认版本为6.0:

1
2
3
4
$ sudo update-alternatives --install \\
/usr/bin/clang++ clang++ /usr/lib/llvm-6.0/bin/clang++ 100
$ sudo update-alternatives --install \\
/usr/bin/clang clang /usr/lib/llvm-6.0/bin/clang 100

升级完linode发现docker服务无法启动了,containerd服务报找不到overlay模块

1
2
3
...
modprobe: FATAL: Module overlay not found
...

linode内核早就启用overlay模块了,这是docker bug导致的。

执行以下命令来解决此问题:

1
2
3
4
5
6
7
8
9
10
11
$ su -
$ mkdir -p /etc/systemd/system/containerd.service.d/

$ cat << EOF > /etc/systemd/system/containerd.service.d/override.conf
\[Service\]
ExecStartPre=
EOF

$ systemctl daemon-reload

$ systemctl start docker

References:
[1]Docker won’t start using the latest Linode kernel

打开TextEdit时提示选择或者新建文件对话框,挺烦人的,用下面的命令可以关闭这一特性,让TextEdit直接打开新文档

1
$ defaults write -g NSShowAppCentricOpenPanelInsteadOfUntitledFile -bool false

还原命令:

1
$ defaults delete -g NSShowAppCentricOpenPanelInsteadOfUntitledFile

bash中一串命令执行用()和{}区别

  • ()只是对一串命令重新开一个子shell进行执行
  • {}对一串命令在当前shell执行
  • ()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
  • ()最后一个命令可以不用分号
  • {}最后一个命令要用分号
  • {}的第一个命令和左括号之间必须要有一个空格
  • ()里的各命令不必和括号有空格
  • ()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

References:
[1]shell中的(),{}几种语法用法

使用数字序列替换

vim查找替换时,可以使用一个数字序列来替换匹配的内容

1
:let i=1 \[range\]g/PATTERN/s//\\=i/g let i=i+1

插入数字序列

1
:put =range(11,15)

可以在文件当前行后插入5行:

1
2
3
4
5
11
12
13
14
15

函数式替换

在替换命令 s/// 中可以使用函数表达式来书写替换内容,格式为

1
:s/替换字符串/\\=函数式

在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容。

举个栗子,将文件从第一行开始的行首替换为如下样式:

1
2
3
4
mem\[0\]=
mem\[1\]=
mem\[2\]=
...

可以执行如下替换:

1
:%s/^/\\='mem\['.(line(".")-1).'\]='

References:
[1]Making a list of numbers
[2]vi/vim的巧妙使用-数值加减,递增,序列等

xmodmap(X modify key map)可以修改X下的键位映射
比如0现在用的键盘没有右边的CTRL,很难用,右侧的INSERT键刚好在空格右侧不远的地方,可以把它修改为右CTRL

可以使用xev程序来查看当前的keymap,可以看到右侧的INSERT键位映射为:

1
2
3
4
5
6
KeyPress event, serial 33, synthetic NO, window 0x2a00001,
root 0xdc, subw 0x0, time 102519, (936,455), root:(986,569),
state 0x10, keycode 118 (keysym 0xff63, Insert), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

导出原映射

1
$ xmodmap -pke > ~/.Xmodmap

修改映射

控制键要先clear,最后再add
编辑.Xmodmap文件,文件开头处添加

1
clear Control

将keycode 118修改为

1
keycode 118 = Control_R NoSymbol Control_R

然后文件尾部添加

1
add Control = Control_L Control_R

测试配置

修改好映射文件后

1
$ xmodmap ~/.Xmodmap

GDM,XDM和LightDM在开启xsession时会自动读取$HOME/.Xmodmap,但不稳定,时好时坏:(

使用startx时激活你自己的映射表,请添加下面的文件和内容:

1
2
3
4
~/.xinitrc
if \[ -f $HOME/.Xmodmap \]; then
/usr/bin/xmodmap $HOME/.Xmodmap
fi

References:
[1]Xmodmap
[2]linux下修改键位映射

$-是bash内置变量,其值为bash shell打开的选项的一个集合

1
2
3
4
5
6
7
8
9
$ echo "$-"
himBH

---
H - histexpand
m - monitor
h - hashall
B - braceexpand
i - interactive

可以使用set -/+ options来打开或者关闭这些shell选项

[1]Bash 为何要发明 shopt 命令

升级MacOS后brew upgrade经常会出现如下错误:

1
2
3
4
5
The bottle needs the Apple Command Line Tools to be installed.
You can install them, if desired, with:
xcode-select --install

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

是因为系统升级后没有安装相应版本的Apple Command Line Tools
解决办法就是像错误提示里说的一样:

1
$ xcode-select --install