让Vim查找字符忽略大小写
Vim默认是对大小写敏感的,下面是让Vim忽略大小写的几种方法:
:set ignorecase
再查找 "include",现在它将匹配 "Include","INCLUDE" 和 "InClUDe"
:set noignorecase
让我们保留这个设定,并查找 "INCLUDE"。它匹配的文本就跟查找 "include" 时一模一
样。现在我们设定 'smartcase' 选项:
:set ignorecase smartcase
如果你采用的模式里至少有一个大写字母,查找就成了大小写敏感的。可以这样理解,你
不必键入大写字母,也能查找到含有大写字母的词,所以,你若键入大写字母,必然是因
为你要大小写敏感的匹配。聪明!
设定了这两个选项,你会找到以下匹配:
模式 匹配
word word、Word、WORD、WoRd 等。
Word Word
WORD WORD
WoRd WoRd
单个模式里的大小写
如果你仅想忽略一个特定的模式里的大小写,那么,在模式前添加 "\c" 字符串就行了。
添加 "\C" 将使该模式的匹配大小写敏感。这排除了 'ignorecase' 和 'smartcase' 选
项的影响,当 "\c" 或 "\C" 起作用时,它们设成什么值无关紧要。
模式 匹配
\Cword word
\CWord Word
\cword word,Word,WORD,WoRd,等。
\cWord word,Word,WORD,WoRd,等。
采用 "\c" 和 "\C" 的好处在于它粘附在所用的模式上。因此,重复查找历史记录里的某
个模式会产生同样的结果。'ignorecase' 或 'smartcase' 是否更改不影响结果。
2013年6月18日星期二
2013年4月27日星期六
[转] vim7 中文显示问题
vim中文显示问题
安装了vim7.2,下载地址 www.vim.org,但是在utf-8下输入中文却是乱码。
使用 :set 命令,发现vimrc中设置的字符集并未生效。
后发现是安装时 configuration 少写了参数;添加如下参数:
./configure --enable-multibyte
就可以正常显示输入的中文了。
附上vimrc的部分内容:
let &termencoding=&encoding
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,gb18030,utf-16,big5
set langmenu=C
注: 如果不指定 --enable-multibyte, set enc, set fileencoding 时发现没有这样的指令.
2013年4月18日星期四
[转] vim 配置高亮显示当前行
vim 是我在Ubuntu下最喜欢用的编辑器(当然win下也有的)。通过对vimrc文件的修改,可以很好的配置vim,比如显示行号,语法高亮等。这里要说的是高亮显示当前行。
如果只是想在这一次使用vim是启用,只需要在正常模式下输入:set cursorline就好了。
要是想每一次打开vim都启用,就要在vimrc文件(ubuntu下位于/etc/vim/vimrc)里加入set cursorline这一句。
如果想修改高亮的颜色,可以在vimrc中加入这两句
如果只是想在这一次使用vim是启用,只需要在正常模式下输入:set cursorline就好了。
要是想每一次打开vim都启用,就要在vimrc文件(ubuntu下位于/etc/vim/vimrc)里加入set cursorline这一句。
如果想修改高亮的颜色,可以在vimrc中加入这两句
|
|
hi CursorLine cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white guibg=darkred guifg=white
|
可以把 darkred,white 等换成你喜欢的颜色。其中 guibg 和 guifg 修改的是下划线的颜色;ctermbg 和 ctermfg 修改的是背景的颜色,可以删去,仅保留下划线。
另附上vim官网关于高亮显示当前行的 tip
2013年4月16日星期二
[分享] vi 实现高亮 C 语言常用 API
vi 是 Uninx 哲学的代表,可配置,可扩展,小巧灵活,将本职做到极致.
vi 的默认配置通常放在 /usr/share/vim 下,如果想要定制个性化的设置,建议在自家的工作目录下覆盖系统的配置,尽量不要修改系统的东西.系统已经提供了良好的覆盖思想来满足不同的需求了.
vi 对 c 源文件有天然的支持,能高亮数据类型和关键字,但对于常用的函数并没有实现高亮,对常常编写c 程序的同学来说,并不十分友好.好在我们可定制可扩展.
$ mkdir -p ~/.vim/syntax
$ cd ~/.vim/syntax
$ curl "https://raw.github.com/hy0kl/profile/master/.vim/syntax/c.vim" > c.vim
没错,就这么简单,如此可实现高亮常见的 c 语言 API.当然,前提是打开了 .vimrc 中的 syntax on.
有图有真相.
vi 的默认配置通常放在 /usr/share/vim 下,如果想要定制个性化的设置,建议在自家的工作目录下覆盖系统的配置,尽量不要修改系统的东西.系统已经提供了良好的覆盖思想来满足不同的需求了.
vi 对 c 源文件有天然的支持,能高亮数据类型和关键字,但对于常用的函数并没有实现高亮,对常常编写c 程序的同学来说,并不十分友好.好在我们可定制可扩展.
$ mkdir -p ~/.vim/syntax
$ cd ~/.vim/syntax
$ curl "https://raw.github.com/hy0kl/profile/master/.vim/syntax/c.vim" > c.vim
没错,就这么简单,如此可实现高亮常见的 c 语言 API.当然,前提是打开了 .vimrc 中的 syntax on.
有图有真相.
2013年4月15日星期一
[总结] 将 VIM 打造成智能 IDE 之 php/python 代码自动补全
关键词: VIM IDE php python 代码补全
VIM 之美在于折腾.
在编辑模式下,按下 ctrl+p 或 ctrl+n 能实现代码自动补全.然此功能有个非常大的局限,补全的内容仅限于本文件出现过的,用来防止拼写错误还成,和 IDE 工具的代码自动补全不能同日而言.
常言道:工欲善其事,必先利其器.选择了神的编辑器,怎么能容忍工具如此功能不全,开发如此不智能呢?! OK,下面主要以 php, python 为例子来说明,怎么实现简单而有效的代码主动补全.
[php]
1. 在用户主目录下建立必要的目录
$ cd
$ mkdir -p .vim/tools/php
2. 在linux 下有个技巧可以快速生成 php 函数自动补全的词表文件,到 php 源码目录下,搜索 PHP_FUNCTION 或 ZEND_FUNCTION 关键字:
$ find ./php.5.3 -type f -name "*.h" -o -name "*.c" | xargs grep -E "PHP_FUNCTION|ZEND_FUNCTION" | sed -ie "s/.*_FUNCTION(//g;s/)//g" | sort | uniq > functions.txt
3. 将 functions.txt 放到 ~/.vim/tools/php 下
4. 修改 VIM 配置文件
$ ~/.vimrc # 加入以下内容
set completeopt=longest,menu " 设置代码提示为弹出层
function AddPHPFuncList()
set dictionary-=~/.vim/tools/php/functions.txt dictionary+=~/.vim/tools/php/functions.txt
set complete-=k complete+=k
endfunction
au FileType php call AddPHPFuncList() " 告诉 VIM 以后缀名来识别文件类型,以进行函数自动补全.
这样在编辑文件时,按下 ctrl+n 实现向下选择提示词, ctrl+p 向上选择提示词.
[python]
1. 在用户主目录下建立必要的目录
$ cd
$ mkdir -p .vim/tools/python
2. 从 http://vim.sourceforge.net/scripts/script.php?script_id=850 下载文件包,并将里面的文件解压到 .vim/tools/python 下.
3. 修改 VIM 配置文件
$ ~/.vimrc # 加入以下内容
function AddPythonFuncList()
set dictionary-=~/.vim/tools/python/complete-dict dictionary+=~/.vim/tools/python/complete-dict
set complete-=k complete+=k
endfunction
au FileType python call AddPythonFuncList() " 告诉 VIM 以后缀名来识别文件类型,以进行函数自动补全.
如此便大功告成.
2013年4月8日星期一
[共享] linu/unix 命令行小技巧
注: 内容来自平时收集和同事贡献.
A,要求A前面不能出现B
1. du -s * | sort -nr | head -n 5
du *, 是对要统计的目录下的所有当前目录的文件和文件夹进行统计,而对文件夹中的文件夹不再统计;而 du -s,则会统计.
2. 统计网络状态
netstat -nta | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
3.过滤掉配置文件中的注释行
sed -i -e '/^#/d' httpd.conf
sed -i.bak -e '/^#/d' httpd.conf #过滤指定文件同时备份文件
grep -v "^ *#" #注意,中间有个空格,否 则不起作用的.
cat /usr/local/etc/apache22/httpd.conf | grep -v \# | sed '/^\s*$/d'
4.vi 中查找替换
:%s/abc/789/gc
每次遇到 abc 都会交互下,是否需要替换.
5. vi 的 recording 命令使用
例子: 想往文件开头加 "",尾部加 "",执行以下命令:
:qa1G0iG%a q
(q 开始到最后 q 结束,第一个 a 是记录到保存名字为 a 的变量之中, G$ 是到文件 最后一行, 0i 是开始处加入, G$ 是到文件 最后一行,第二个 a 是要往最后一行的后面写)以后进入任何一个文件都可以直接按 @a 完成上面的功能.
6. Q: 有 A, B 两文件列表,如何找出只在 A 列表出现过的行?
A: sort -T ~/tmp/ A B B | uniq -u > result.list
7. Q: 怎样递归替换目录下所有文件中的字符串?
A: 预览: foo => bar
sed -e 's/foo/bar/g' `grep 'foo' * -R|`
确认修改:
set -i 's/foo/bar/g' `grep 'foo' * -R|`
8. 如何使用sar命名查看linux系统状态?
$ sar 看CPU利用率情况
$ sar –q 看平均负载
$ sar –d 看磁盘访问情况
9. 有时候磁盘空间满了,该如何查找哪个文件夹比较大?
可以使用如下命令找到占空间最多的几个文件夹
du -sh * | sort -nr | head -n 5
10. 怎样查看处在各种状态下的TCP连接数,以便分析服务是否正常
使用如下命令,可以按照连接状态分别统计出来
netstat -nta | awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'
如果要单独查看某个服务,则用端口号过滤一下,例如:
netstat -nta | grep 21221 | awk '/^tcp/{++S[$NF]} END {for(a in S) print a,S[a]}'
11. 创建alias,快捷的ssh到一台机器上
修改~/.bashrc文件,添加如下两行
_go(){ ssh -A username@192.168.0.$1; }
alias go=_go
这样一来,原本需要ssh -A username@192.168.0.154 现在只需要改用go 154即可,快很多吧!
12. 正则表达式高级技巧:
预查及负向预查
有时候我们希望在文本中匹配一段字符串A,但是要求这段字符串的前面(或者后面)必须出现(或者不能出现)字符串B,就需要用到预查,
预查分为正向预查、反向预查;负向预查分为负正向预查和负反向预查。
这四种预查的语法分别是:
A(?=B) 匹配A,要求A后面必须出现B
(?<=B)A 匹配A,要求A前面必须出现B
A(?!B) 匹配A,要求A后面不能出现B
(?匹配
13. 如何查找N天没有被修改过的文件?
下面这条命令会列出在当前目录下最近128天没有被修改过的文件
$ find . -mtime +128
如果想删除,则
cd dest-dir && find ./ -type f -mtime +128 -exec rm {} \;
如果想删除,则
cd dest-dir && find ./ -type f -mtime +128 -exec rm {} \;
14. Nginx如何平滑重启?
比如pid文件位于/usr/local/nginx/nginx.pid, 运行sudo kill CHUP `cat /usr/local/nginx/nginx.pid`这条即可
这样修改了配置文件,不用杀死nginx进程,也可以让配置文件生效
15. nginx如何防止网站被过度抓取?
配置如下:
limit_zone zone $binary_remote_addr 10m; //定义一个存放会话信息的区块
limit_conn zone 10; #限制一个IP并发连接数为10个
imit_rate 20k; #限制带宽
16. Nginx如何打开长连接?
打开长连接,可以有效节省带宽,降低压力,web server为nginx的情况下,配置文件设置添加keepalive_timeout 60;
即可打开长连接,时间为60秒,根据需要,可以增大或调小这个时间。keepalive_timeout 0;则关闭长连接
17. 如何对最近N天没有被修改过的log文件存档?
我们的log文件好多都是一天一个文件,经常看的估计就是最近两三天的,
那么对N天前的log文件存档(压缩),是有必要的.
find ./ -type f -mtime +30 | xargs tar -cvf ./`date +%Y%m%d`.tar
这个是命令是查找当前目录下最近30天没有被修改过的文件并在当前目录下创建一个格式
为YYYYMMDD.tar的归档文件.
18. 最简便的清空 memcache 的方法?
如果要清空memcache的items,常用的办法是什么?杀掉重启?如果有n台memcache需要重启怎么办?挨个做一遍?
很简单,假设memcached运行在本地的11211端口,那么跑一下命令行:
$ sudo echo "flush_all" | nc 192.168.0.168 11211
注:flush并不会将items删除,只是将所有的items标记为expired。
19. 如何快速的把一个unix时间戳转换为普通时间?
使用date -d@ 后接unix时间戳
$ date -d@1271397015 # debian Linux GNU/Linux
$ date -r 1271397015 # Mac OS/BSD
Fri Apr 16 13:50:15 CST 2010
20. 如何在vim中删除空行?
刪除沒有內容的空行
:g/^$/d
刪除包含有空格組成的空行
:g/^\s*$/d
除以空格或tab開頭到結尾的空行
:g/^[ |\t]*$/d
21. 如何粘贴后自动整理代码,省去 = 对齐代码的重复操作?
]p
22. 快速清空文件
$ : > data.file
注: 只适用于正规文件,不能是管道,符号链接,和某些特殊文件.
23. {} 的扩展作用
$ cp file22.{txt,backup}
拷贝 file22.txt 到 file22.backup 中.
注: {} 中不能不允许空白,除非这个空白是有意义的.
25. 取昨天的时间
$ date -d"yesterday" +%Y%m%d
26. 可以使用一下命令查使用内存最多的5个进程
ps -aux | sort -k4nr | head -n 5
或者: top F n
ps -aux | sort -k4nr | head -n 5
或者: top F n
27. 可以使用一下命令查使用CPU最多的5个进程
ps -aux | sort -k3nr | head -n 5
ps -aux | sort -k3nr | head -n 5
28. Linux删除乱码文件
当文件名为乱码的时候,无法通过键盘输入文件名,所以在终端下就不能直接利用rm,mv等命令管理文件了。
但是我们知道每个文件都有一个i节点号,我们可以考虑通过i节点号来管理文件。首先,我们要取得文件的i节点号。这个可以通过ls命令的-i选项获得得,也可以通过ll -i 来获得。
第二步,使用find命令将文件名传递给rm命令。e.g:删除节点为12345的乱码文件夹可以使用如下命令
find ./ -inum 12345 -print -exec rm {} \;
注意\;前面的空格不能少,少了就会报错。
当文件名为乱码的时候,无法通过键盘输入文件名,所以在终端下就不能直接利用rm,mv等命令管理文件了。
但是我们知道每个文件都有一个i节点号,我们可以考虑通过i节点号来管理文件。首先,我们要取得文件的i节点号。这个可以通过ls命令的-i选项获得得,也可以通过ll -i 来获得。
第二步,使用find命令将文件名传递给rm命令。e.g:删除节点为12345的乱码文件夹可以使用如下命令
find ./ -inum 12345 -print -exec rm {} \;
注意\;前面的空格不能少,少了就会报错。
29. svn diff 的几个有用的操作
1). 比较工作副本和版本库
如果传递一个 --revision (-r) 参数,你的工作副本会与版本库中的指定版本比较:
$ svn diff -r 3 rules.txt
2).如果通过 --revision (-r) 传递两个通过冒号分开的版本号,这两个版本会直接比较:
$ svn diff -r 2:3 rules.txt
A more convenient way of comparing one revision to the previous revision is to use the --change (-c) option:
$ svn diff -c 3 rules.txt
3). 即使在本机没有工作副本,还是可以比较版本库的修订版本,只需要在命令行中输入合适的URL:
$ svn diff -c 5 http://svn.example.com/repos/example/trunk/text/rules.txt
30. Linux 下安全的去重排序
$ sort -uf input
1). 比较工作副本和版本库
如果传递一个 --revision (-r) 参数,你的工作副本会与版本库中的指定版本比较:
$ svn diff -r 3 rules.txt
2).如果通过 --revision (-r) 传递两个通过冒号分开的版本号,这两个版本会直接比较:
$ svn diff -r 2:3 rules.txt
A more convenient way of comparing one revision to the previous revision is to use the --change (-c) option:
$ svn diff -c 3 rules.txt
3). 即使在本机没有工作副本,还是可以比较版本库的修订版本,只需要在命令行中输入合适的URL:
$ svn diff -c 5 http://svn.example.com/repos/example/trunk/text/rules.txt
30. Linux 下安全的去重排序
$ sort -uf input
31. 用 diff 制作 patch 包.
% diff -ru original newfile > patch.package
% diff -ru original newfile > patch.package
32. MySQL 导出查询数据
% mysql -h127.0.0.1 -uroot -p3006 --default-character-set="utf8" 数据库名 < select.sql > result
% mysql -h127.0.0.1 -uroot -p3006 --default-character-set="utf8" 数据库名 < select.sql > result
33. 如何查看Linux操作系统的位数
(1).编程实现:
在程序中返回sizeof(int)的值,返回的结果是操作系统的字节数。若返回4则是32位操作系统,返回8即是64位。
(2).getconf命令:
getconf命令可以获取系统的基本配置信息,比如操作系统位数,内存大小,磁盘大小等。
例如:
getconf LONG_BIT
(1).编程实现:
在程序中返回sizeof(int)的值,返回的结果是操作系统的字节数。若返回4则是32位操作系统,返回8即是64位。
(2).getconf命令:
getconf命令可以获取系统的基本配置信息,比如操作系统位数,内存大小,磁盘大小等。
例如:
getconf LONG_BIT
34. Ubuntu 删除旧内核
$ sudo aptitude purge ~ilinux-image-.*\(\!`uname -r`\)
$ sudo aptitude purge ~ilinux-image-.*\(\!`uname -r`\)
35. SVN 只提交空目录
$ svn add --depth=empty dir
$ svn add --depth=empty dir
36. 查看文件数目
find . -type f | wc -l
37. 彩色 man 显示
在.bashrc中加入如下代码:
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
find . -type f | wc -l
37. 彩色 man 显示
在.bashrc中加入如下代码:
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;31m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;44;33m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;32m'
38. vim中删除每行行尾的空格
:% s/\s\+$//g
:% s/\s\+$//g
39. iconv 转码失败?!
加 -c 参数即可.
iconv -c -f "utf-8" -t "gbk" utf-8.file -o gbk.file
加 -c 参数即可.
iconv -c -f "utf-8" -t "gbk" utf-8.file -o gbk.file
40. iconv 转化编码是忽略出错内容
iconv 用于字符编码转化:
官方用法: iconv(“gb2312”, "UTF-8", "测试语句");
在实际操作中,需要(最好)在第二个参数后面加上“//IGNORE”,即
iconv("gb2312", "UTF-8//IGNORE", "测试语句");
这个参数的意思是当转化过程中如果出错,那么就跳过错误,而不是默认的停在那里。
命令行中的用法是:
iconv -f gbk -t utf-8//IGNORE from_file.txt -o new_format_file.txt
iconv 用于字符编码转化:
官方用法: iconv(“gb2312”, "UTF-8", "测试语句");
在实际操作中,需要(最好)在第二个参数后面加上“//IGNORE”,即
iconv("gb2312", "UTF-8//IGNORE", "测试语句");
这个参数的意思是当转化过程中如果出错,那么就跳过错误,而不是默认的停在那里。
命令行中的用法是:
iconv -f gbk -t utf-8//IGNORE from_file.txt -o new_format_file.txt
41. 不解压缩直接查看*.gz和*.bz2命令
FreeBSD会把老的系统日志打包压缩存放,减少了磁盘空间占用。原来以为解压缩后才能查看日志内容,其实不然,使用zcat可以查看*.gz文件内容,使用bzcat可以直接查看*.bz2文件,很方便!
FreeBSD会把老的系统日志打包压缩存放,减少了磁盘空间占用。原来以为解压缩后才能查看日志内容,其实不然,使用zcat可以查看*.gz文件内容,使用bzcat可以直接查看*.bz2文件,很方便!
42. vi 中将空格替换成换行:%s/ \+/\r/g
43. vi中查找精确匹配或完全匹配
假设要查找的内容为abc, 要求精确匹配,则: /\
即用 \<\> 将内容包起来,再如精确匹配www: /\
前匹配和后匹配.可以从上面的做法推导出来.
假设要查找的内容为abc, 要求精确匹配,则: /\
即用 \<\> 将内容包起来,再如精确匹配www: /\
前匹配和后匹配.可以从上面的做法推导出来.
44. 取当前时间的 unix 时间戳
$ date +%s
订阅:
博文 (Atom)


