Linux Tips (1)

这里记录一些小技巧,比较杂。

1. bash下,x{a,b}会被展开为xa xb,很适合文件备份。
如果你要复制一份a.txt作为备份,到a.txt的路径又太长了,这么写比较方便。

cp /a/long/long/long/path/to/file/a.txt{,bak}

2. vim下,要把某些内容替换成为行号,可以用\=line(“.”)来处理。“.”用来连接行号和其它内容。

:%s/xxxx/\=line(".") . " "/g

3. bash脚本下,如果要写多行到文件里,可以用

cat > file << EOF
file content line 1
file content line 2
file content line 3
file content line 4
EOF

这是一种固定写法,从第二行起,遇到EOF就停止,把之前的内容写到file里。EOF也可以换成别的。

4. Trap SIGINT的时候记得要处理SIGINT信号。

#! /bin/bash

trap "echo 'hello'; exit 1" SIGINT SIGTERM

while [ 1=1 ];
do
    sleep 1
done

exit 1这部分是必须的,否则虽然按下Ctrl + C的时候会显示hello,但是脚本不会被终止。

Xresources File

感觉用Linux的一大好处就是纯文本的配置文件决定一切。
今天在一个新机器上搭自己的开发环境,
apt-get(墙外的网络真快,也用不着去辛苦地找源)一下,
把几个配置文件拷过去,就和老机器一样了。

基本上用到的就是openbox的配置, vimrc, screenrc, bashrc和Xresources

很奇怪的是Xresources拷过去不工作,google到了这个X resources

应该是因为没有起Xorg,~/.Xresources没有被自动地处理,所以需要在~/.xinitrc里面增加一行

xrdb -merge ~/.Xresources

重开一下X就行了。

[Tips]2011-10-30

vim的paste mode

我们会遇到这样的情况:
需要从Vim之外的其它程序里拷贝一大段文字,然后在Vim里粘贴。

一般的,启动vim之后,按i进入插入模式 (Insert Mode),然后粘贴就行了。
但是当Vim的配置越来越多,插入模式下粘贴大段文字时可能会遇到各种诡异的情况。
因为这个时候的粘贴就相当于手动输入这些内容,于是各种映射 (Mapping) 就被触发了….

:set paste

可以启动一种paste模式,这个时候各种Mapping会被无视,各种自动缩进也无效。和在记事本里粘贴效果一致。

paste命令也符合Vim的通常规范

:set nopaste

可以关掉它。

[Tips]2011-10-19

两个Vim的小技巧 :]

其实就是两个正则表达式,刚好今天用到了,就记下来。

1. 有多行文本,其中有几行是URL,要保留这几行URL,其它的行删掉。

:g!/:\/\//d

g本来是用来做grep类似的事情的,:g/pattern 会显示出符合pattern的所有行
惊叹号!表示相反,就是指选中的行是不符合pattern的。后面的/d是表示删掉选中的行。

2. 有多行文本,每行都是类似这样的

keyA=valA&keyB=valB&keyC=valC

现在要交换key和val的位置,变成

valA=keyA&valB=keyB&valC=keyC

:%s/\<\(\w*\)\>=\<\(\w*\)\>/\2=\1/gi

%s是全局替换,这个比较常用了。\<和\>是不太常用的anchor字符(锚字符),分别表示word的开始和结束。
\(..\)也比较常用了,可以保存匹配结果。\w*表示一个或多个word字符。
word字符包括a-zA-Z _ 和 0-9

:]