VIM 配置和使用

本文常更新,记录笔者在使用 VIM 的过程中,用到的一些 tips

配置:

1、根据文件类型自动设置不同的缩进值:
autocmd FileType html set ts=2 sts=2 sw=2
autocmd FileType javascript set ts=4 sts=4 sw=4

2、KDE 下 konsole 启动 vim 如果要正常使用配色需要环境变量 TERM=xterm-color256 (2013-09-07 15:22:07)

另外我的配置文件在这里:https://github.com/upliu/dotfiles

使用:

1、插入当前文件名:在 insert 模式下按:Ctrl-R % 或者 在 normal 模式下按:”%p

2、复制内容到系统剪切板:在 normal 模式下按:”+y
粘贴系统剪切板的内容到vim:在 normal 模式下按:”+p
相关知识:查看寄存器::reg
(Ubuntu 13.04 安装 vim 后没有 + 寄存器,得安装 vim-gui-common 后才有 + 寄存器)
(Ubuntu 默认终端下可以 Ctrl-Shift-C 复制 Ctrl-Shift-V 粘贴,更正错误,不能 C-S-C 复制,但是可以选中后 C-S-V 粘贴)

3、查找当前串:normal 模式下按 * (Shift+8) 键

4、zen-coding 默认绑定键:Ctrl+Y+,

5、查找贪婪模式 .* 非贪婪模式 .\{-}

6、删除匹配行 g/pattern/d(删除空行:g/^$/d)

7、删除不匹配行 g!/pattern/d 或 v/pattern/d

8、跳转到匹配的括号:%

9、删除换行符:命令模式下按 J(大写的 j)

10、显示回车换行等特殊字符:set list

11、删除空行 :g/^\s*$/d

12、忘记sudo :w !sudo tee %

Eclipse 快捷键

一直都不太喜欢用 Eclipse 因为实在是习惯了 vim 的快捷键操作方式,但是呢,vim 又用的不到家,当 IDE 使还不够,所以,现在修改单个文件的时候用 vim,但是开发项目时还是用 Eclipse。

这篇文章包含我需要用到的 Eclipse 快捷键:

删除当前行:Ctrl+D
在当前行上插入一行:Ctrl+Shift+Enter Shift+Enter
在当前行下插入一行: Shift+Enter
上下移动选中的行:Alt+Up/Down
打开资源:ctrl+shift+r
Emmet(原zen-coding)默认快捷键为:Ctrl+E

CSS 类的一些规则

最近在公司一直在做页面的改造工作,原有的页面样式表很混乱,都是一个页面一个样式表,有十几个模版,改动时就得一个个来,做这些重复工作还真是一件让人烦躁的事情呢。

昨晚上看了别人的博客,讲到如何分离样式表,如何来写 class ,根据内容还是根据属性,感觉收获很大,以前从来都是用,怎么方便怎么写,看了他人的博客后来又读了 MDN 上的一篇文章,原来自己之前的做法很不可取。

Writing efficient css:https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Writing_efficient_CSS

J K 键翻页脚本

这两天经常用 vim ,j k 键翻页各种爽,于是想能否让所有网页都可以这样。采用 Bookmarklet 来完成。

这是我第一次用 javasciprt 写出来的实用的东西。我还是蛮有成就感的,高手勿笑,哈哈哈~~

把这个链接拖动到书签栏,以后需要使用 JK 键进行翻页时点击一下这个书签就 OK 了。

写此代码给我带来帮助的网址:

1、http://www.ruanyifeng.com/blog/2011/06/a_guide_for_writing_bookmarklet.html
2、http://ted.mielczarek.org/code/mozilla/bookmarklet.html

wordpress 好像不支持在文章里直接插入 javascript 代码,代码如下,加入到浏览器收藏夹即可:

javascript:(function(){document.addEventListener('keypress',function press(e){if(e.charCode==106){scrollBy(0,window.innerHeight/2);}else if(e.charCode==107){scrollBy(0,-window.innerHeight/2);}});})();

Linux 网络相关的命令

ifconfig 查看网络接口信息

ifconfig -a #查看所有接口
ifoncifg eth0 #查看特定接口
ifup eth0 #启用网卡
ifdown eth0 #禁用网卡

ping 测试网络连通性

ping 192.168.1.1
ping www.qq.com

host 或 dig 测试DNS解析

host www.qq.com
dig www.qq.com

ip route 显示路由表

route 路由配置命令
使用方法请自行搜索或查看 Man Page

traceroute 追踪到达目的地址的网络路径

traceroute www.qq.com

mtr 网络质量测试(结合了 traceroute 和 ping)

mtr www.qq.com

Linux 的文本处理命令一览

grep 基于关键字搜索文本内容

-i 搜索时忽略大小写
-n 显示结果所在行数
-v 输出不带关键字的行
-Ax 在输出的时候包含结果所在行之后的指定行数(x为一个数值,表示输出后面x行)
-Bx 在输出的时候包含结果所在行之前的指定行数(同上)

cut 基于列处理文本内容
cut -d: -f1 /etc/passwd
grep upliu /etc/passwd | cut -d: -f3

-d 指定分割字符(默认是TAB)
-f 指定输出的列号
-c 基于字符进行切割

cut -c2-6 /etc/passwd #显示第2到6列的文字
wc 统计文本信息

-l 只统计行数
-w 只统计单词
-c 只统计字节数
-m 只统计字符数

sort 对文本内容进行排序

-r 进行倒序排序
-n 基于数字进行排序
-f 忽略大小写
-u 删除重复行
-tc 使用 c 作为分隔符分割为列进行排序

uniq 删除相邻重复行

详情请看 man uniq 手册

diff 比较两个文本文件内容的区别

-i 忽略大小写
-b 忽略空格数量的改变
-u 同意显示比较信息(一般用于生成 patch 文件)

diff -u upliu.txt upliu-new.txt > final.path
aspell 检查英文拼写

该命令只能检查英文

tr 处理文本内容
tr 'a-z' 'A-Z' < upliu.txt # 小写字母替换为大写字母
sed 搜索替换

详细教程见这里:http://learn.akae.cn/media/ch32s03.html
和这里:http://coolshell.cn/articles/9104.html

awk 以列为单位处理文件

详细教程见这里:http://learn.akae.cn/media/ch32s04.html
和这里:http://coolshell.cn/articles/9070.html
sed awk 这两个工具比较强大,用法需要慢慢消化理解

Linux 利用 locate 和 find 查找文件

命令 locate 用于快速查找文件、文件夹。此命令并没有在磁盘上查找所有文件,而是在预先建立的数据库里进行搜索。可以使用 updatedb 命令建立、更新数据库。

find 命令更加高级,使用方法:find 查找位置 查找参数;

find . -name *upliu*
find / -name *.conf
find . -type d
find . -perm 777
find . -name "Do*" -exec ls {} \;

-exec 命令 {} \; 是固定格式,表示将查找到的文件、文件夹作为参数传给命令。

Linux 学习笔记(一)

最近准备有空就系统学一下 Linux 的基础操作知识,主要是在 study.163.com 这个上面看视频教程。

Bash 笔记:

可以通过 Ctrl + r 在历史记录中搜索命令
(reverse-i-search)`’:

重新调用前一个命令中的参数
按 ese 之后按 . 键

Bash 支持以下通配符
* 匹配零个或多个任意字符
? 匹配任意字符一次
[0-9] 匹配一个数字
[abc] 匹配列表里的任何字符
[^abc] 匹配列表以外的字符

在后台运行进程
在命令后添加一个 &

暂停某个程序
通过 Ctrl + z 或者发送信号 17

管理后台作业
jobs
bg
fg %n(将编号为 n 的后台作业拿到前台来)

tail -f 追踪显示文件更新(一般用于查看日志,命令不会退出,而是持续显示新加入的内容)

PHP in_array 函数的一个问题

有如下代码:

var_dump(in_array('0', array('abc', 'def')));
var_dump(in_array(0, array('abc', 'def')));
var_dump(in_array('1', array('abc', 'def')));
var_dump(in_array(1, array('abc', 'def')));

会输出:

boolean false
boolean true
boolean false
boolean false

第 2 个输出与我们预想的不一样,为什么会出现这种情况呢?

in_array 函数在进行比较的时候,会先进行类型转换,字符串和数字进行比较,会将字符串转换为数字,而字符串被强制为数字 0,因此 in_array(0, array[‘abc’, ‘def’]); 为 TRUE

为了避免这种意外,可以在 in_array 函数添加第三个参数 in_array(0, array[‘abc’, ‘def], TRUE);,那么在比较的时候除了比较值还会比较类型。