存档:tools

svn 学习

十一月 15, 2008 | linux, tools | RSS 2.0

SVN是CVS的下一个版本,主要用来进行版本控制,可以对程序代码,音频,视频以及图像文件等,做版本控制。

目录以及文件是Subversion中可以记录版本的对象。其主要工作原理如下图:
                   _ _ _ _ _ _ _ _ _ _
                  /                             
                  |                               |
                  |      项目仓库            |
                  |                               |
                  _ _ _ _ _ _ _ _ _ _/
                        /                  |
                       /     check in |
     check out /                     |
_ _ _ _ _ _ /_ _               _|_ _ _ _ _ _ _                   
/                                      /                       
|                          |            |                         |
|      工作拷贝       |            |        工作拷贝    |
|                          |            |                         |
_ _ _ _ _ _ _   _/             _ _ _ _ _ _ _ _/

分支,主干,合并,标签
创建一个分支或者标签时,采用一种”延迟拷贝”的技术,即只创建指向同一版本的链接,当其中某个文件有所改动时,再去复制那个文件或者目录。
一般地来讲,分支是用来做准备发布的,而不是并行开发。

1、创建一个项目仓库
svnadmin create /home/huzza/test_svn

2、import初始文件到项目仓库中
svn import -m source_file_path URL
本例 URL:file:///home/huzza/test_svn/sesame/trunk
file:// ——> 告诉svn是本地目录

3、checkout文件到本地目录
svn checkout(co) file:///home/huzza/test_svn/sesame/trunk sesame

4、检查文件状态或者日至
svn status [文件/目录]
svn log [文件/目录]
svn log -r6:8 [文件/目录]     查看版本6到版本8之间的日志

5、文件/目录比较(工作拷贝与项目创库中的比较)
svn diff [文件/目录]     或者      svn diff –rHEAD [文件/目录]     –rHEAD:表示最新版本

6、更新本地工作拷贝,提交工作修改
svn update(up) [文件/目录]       svn checkin(in) -m”comments” [文件/目录]
update时的一些文件标志:
     U —— 表示文件被更新
     G —— 表示项目创库中的文件和本地工作拷贝的文件合并到了一起
     C —— 表示合并时,有冲突产生
     A —— 新加入了一个文件
     D —— 删除了一个文件
     ? —— 表示该文件或者目录没有被svn管理
     M —— 该文件被修改

7、冲突。当svn update时,如果存在某个文件存在冲突,打开冲突的文件,<<<<<<<< 和 >>>>>>>> 表明了冲突发生的地方。
当冲突发生时,如果想使用项目仓库中的版本,而放弃本地拷贝的修改,可以使用以下命令:
a、svn revert [冲突的文件/目录]
b、svn update [冲突的文件/目录]
(svn resolved [文件/目录] && svn updata [文件/目录],似乎也是ok的,需要confirm一下)
如果想保留本地工作拷贝的修改,而放弃项目仓库中版本的修改,可以如下:
a、cp 文件/目录.mine 文件/目录
b、svn resolved 文件/目录
c、svn ci -m “use my version please” 文件/目录
(在上面的三个步骤中,似乎不用做步骤a也可以达到目的)

8、使svn项目仓库联网
启动svn服务器:svnserve –daemon –root /home/huzza/test_svn
列服务器资源:svn list svn://192.168.0.4/sesame/trunk
出来后面的URL不同,其他操作的各部分均相同
svn+ssh 访问:svn list svn+ssh://192.168.0.4/sesame/trunk        (需要在服务器上支持ssh访问)

9、得到特定版本的工作拷贝
svn checkout -rVersionNum list svn://192.168.0.4/sesame/trunk butterfly
svn info butterfly     (查看当前版本拷贝的状态)

10、拷贝/移动文件
svn copy filename newfile
svn move oldfile newfile
svn ci -m “add or move some files” [修改文件所在的目录]      (这里确保服务器上也作跟本地拷贝相同的动作)

11、版本的符号
HEAD ——— 项目仓库中的最新版本
BASE ——— 工作拷贝的基准版本(也就是checkout出来时的版本)
COMMITTED —- 最后一次checkin的版本
PREV ——— COMMITTED之前的一个版本

12、查找版本之间的差异
svn diff -r2:4 [文件/目录]
svn diff > diffname.patch (生成patch文件)
使用patch文件: patch -p0 -i diffname.patch

13、删除后一个版本对前一个版本的修改
svn merge -r27:26 [文件/目录] && svn ci -m “undo the work of version 27″
撤销版本27所做的修改

14、创建分支/标签
svn mkdir -m “Create branches” svn://192.168.0.4/sesame/branches
svn copy -m “Create release branches for version 1.0″ svn://192.168.0.4/sesame/trunk
                                                         svn://192.168.0.4/sesame/branches/release-1.0

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1751561

没有评论 »

vi中的代码折叠

十一月 14, 2008 | linux, tools | RSS 2.0

在查看代码的时候,如果代码十分冗长,尤其是c/c++系列的时候,
代码结构比较让人难以理清,主要是各种注释、括号的匹配问题,
虽然可以用%来查看匹配的另外一半符号在哪里,但是如果这一对符号之间的代码超过了一页,甚至好几页的话,那么也是比较难以理解的。
于是可以使用这个vim所提供的折叠功能来简化这些分析。
我使用的vim是rh9自带的版本。
折叠的方式:
vim 提供 6中折叠方式
          manual           手工定义折叠
          indent             更多的缩进表示更高级别的折叠
          expr                用表达式来定义折叠
          syntax             用语法高亮来定义折叠
          diff                  对没有更改的文本进行折叠
          marker            对文中的标志折叠
可用选项 ‘foldmethod’ 来设定折叠方式:set fdm=*****。
注意,每一种折叠方式不兼容,即:你不能用expr又用marker方式。
目前我一般使用的都是indent 比较多。
使用时,用:set fdm=indent 命令来设置成marker折叠方式。
在.vimrc文件中添加设置,可以使得每次打开vi 都启动折叠方式。如添加:set fdm=syntax。
2. 折叠打开与折合
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了。
如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
indent 对应的折叠代码有:
zc      折叠
zC     对所在范围内所有嵌套的折叠点进行折叠
zo      展开折叠
zO     对所在范围内所有嵌套的折叠点展开
[z       到当前打开的折叠的开始处。
]z       到当前打开的折叠的末尾处。
zj       向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk      向上移动到前一折叠的结束处。关闭的折叠也被计入。
使用时在大括号中间输入以上命令。
当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动之:)
可以使用下面的命令来创建和删除折叠:
zf      创建折叠,比如在marker方式下:
                   zf56G,创建从当前行起到56行的代码折叠;
                   10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
                   10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
                   在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],等)。
zd      删除 (delete) 在光标下的折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
zD     循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
          仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
zE     除去 (Eliminate) 窗口里“所有”的折叠。
          仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。

:ls
列出缓冲区列表

:buffer #
打开相应缓冲区号中的文件

:bnext
:bprevious
:bfirst
:blast

:pwd
显示当前目录

:cd 目录名
改变当前目录

:e 文件名
在当前目录创建文件

:wa
保存所有已经命名的缓冲区

:e .
打开目录列表, 这个插件很神奇, 很强大, 这里有几个常用的命令:
c 将你浏览的目录设为当前目录
R 为文件重命名
D 删除文件

在头文件上输入gf命令, Vim会寻找并打开文件, 如果该头文件不在此目录中, 则可以通过

:set path+=目录名的方式添加需要查找的路径.

没有评论 »

vi高级应用

十月 29, 2008 | linux, tools | RSS 2.0

find ./ -name “*.doc” -exec rm {} ;

2,用find , grep, xargs 的组合

 find | grep .doc$ | xargs -i rm {}

  看上去,第一个简单一些,但很类似,不过如果要实现:
  删除那些没有指定后缀的文件,那用find的时候,文件名的匹配,似乎要麻烦一些,而用后者就来得很轻松。

find | grep -v .doc$ | xargs -i rm {}

1.交换两个字符位置
xp
其实就是删除光标当前字符(x),然后再将缓存的字符贴出(p)

2.上下两行调换
ddp
实际就是(dd)删除当前行,(p)后即将缓存的行贴出

3.把文件内容反转
:g/^/m0
找到每一行,然后m移动到当前第一行的上面

4.上下两行合并
J
实用性:高,shift+j

5.删除所有行
dG
(d)为删除,(shift+g)到文件尾,因此这命令效用为从光标处删除至文件尾
那么删除到文首呢?对了,如果知道gg可以将光标移至文首,那么dgg便是删除到文首了
类似的还有:
dw — 删到词尾
db — 删到词头
daw — 删除光标所在词(较有用)

如果你用 "c" 代替 "d",这会变成修改命令;而改用 "y",则变成拷贝命令,等等等等。

6.从当前位置删除到行尾
d$
(d)删除,$ (即 shift+4)为行尾,^( 即 shift+6)为行头,依此类推,d^删除至行头
更为简洁的命令为D,对了,就是shift+d,就这么简单

7.从当前位置复制到行尾
y$ 如果要粘贴到其他地方 p 就可以了
同上

由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态

8.
:ab string strings
例如 “:ab usa United States of America” ,
当你在文件里插入 usa 时
United States of America 就蹦出来了
其实执行的是":abbreviate"命令,用":unabbreviate"命令解除缩写,要删除全部缩写用":abclear"

9.
:map keys new_seq
定义你当前 键盘命令
键映射,我前面的tips有用到

10.
:set [all]
vi or ex 的编辑状态
如 显示每行 :set nu
set,就是set,不显示行号”:se nonu”

11.
在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,可刚复制的内容粘贴在光标处的
下面。
讲的太不清楚了,n用数字代替,即将后面的指令重复执行n次,yy为复制,nyy复制n行

12.
单个字符替换用r,覆盖多个字符用R,用多个字符替换一个字符用s,整行替换用S
实用性:高,S等于我常用的cc或C

13.
:%s/old_word/new_word/g
这个指令是于在整个文件中替换特定字符串
替换,用法是这样:”:起始行,结束行s/搜索串/替换串/gc” 从起始行到结束行,把所有的搜索串替换为替换串,最后那个”c”为开启交互式替换,%为全文

14.光标控制
k:上移 nk 上移n行
j:下移 nj 下移n行
光标移动,还有h:左移  l:右移,不过我更喜欢用上、下、左、右,嘿嘿

将光标移到第n行,按下 mk
将光标移到第m行,按下 “ay’k
即将第n到m的行存到a寄存器,以此类推,b,c……..寄存器等
这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用
想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可,以此类推,b,c……..寄存器等

在当前屏幕中
H 跳到第一行
M 跳到中间一行
L 跳到最后一行
当前屏幕的光标控制技巧,助记方法为:Head、Middle、Last

15.
表8-2 删除命令
删除命令操作
d l 删除当前字符(与x命令功能相同)
d 0 删除到某一行的开始位置
d ^ 删除到某一行的第一个字符位置(不包括空格或TA B字符)
d w 删除到某个单词的结尾位置
d 3 w 删除到第三个单词的结尾位置
d b 删除到某个单词的开始位置
d W 删除到某个以空格作为分隔符的单词的结尾位置
d B 删除到某个以空格作为分隔符的单词的开始位置
d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置
d) 删除到某个语句的结尾位置
d 4) 删除到第四个语句的结尾位置
d( 删除到某个语句的开始位置
d } 删除到某个段落的结尾位置
d { 删除到某个段落的开始位置
d 7 { 删除到当前段落起始位置之前的第7个段落位置
d d 删除当前行
d /t e x t 删除从文本中出现” t e x t”中所指定字样的位置,一直向前直到下一个该字样所出现的
位置(但不包括该字样)之间的内容
d fc 删除从文本中出现字符”c”的位置,一直向前直到下一个该字符所出现的位置(包括
该字符)之间的内容
d tc 删除当前行直到下一个字符” c”所出现位置之间的内容
D 删除到某一行的结尾
d $ 删除到某一行的结尾
5 d d 删除从当前行所开始的5行内容
d L 删除直到屏幕上最后一行的内容
d H 删除直到屏幕上第一行的内容
d G 删除直到工作缓存区结尾的内容
d 1 G 删除直到工作缓存区开始的内容

修改命令操作
c l 更改当前字符
c w 修改到某个单词的结尾位置
c 3 w 修改到第三个单词的结尾位置
c b 修改到某个单词的开始位置
c W 修改到某个以空格作为分隔符的单词的结尾位置
c B 修改到某个以空格作为分隔符的单词的开始位置
c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置
c 0 修改到某行的结尾位置
c) 修改到某个语句的结尾位置
c 4) 修改到第四个语句的结尾位置
c( 修改到某个语句的开始位置
c } 修改到某个段落的结尾位置
c { 修改到某个段落的开始位置
c 7 { 修改到当前段落起始位置之前的第7个段落位置
c tc 修改当前行直到下一个字符c所出现位置之间的内容
C 修改到某一行的结尾
c c 修改当前行
5 c c 修改从当前行所开始的5行内容

.重复上一次修改!

表8-4 替换命令
替换命令操作
s 将当前字符替换为一个或多个字符
S 将当前行替换为一个或多个字符
5 s 将从当前字符开始的5个字符替换为一个或多个字符

vi替换使用规则:
:g/s1/s/s2/s3/g
第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

16.
fx
往右移动到 x 字符上
Fx
往左移动到 x 字符上
tx
往右移动到 x 字符前
Tx
往左移动到 x 字符后
(注意:以上四个命令中,其中x是键入的字符)
;
分号,配合 f 和 t 使用,重复一次
,
逗号,配合 f 和 t 使用,反方向重复一次
如果不结合;与,很不好用,nfx为移到第n个x字符上

17. vi 环境选项 Solaris ksh

noautoindent nomodelines noshowmode
autoprint nonumber noslowopen
noautowrite nonovice tabstop=8
nobeautify nooptimize taglength=0
directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags
noedcompatible prompt tagstack
noerrorbells noreadonly term=vt100
noexrc redraw noterse
flash remap timeout
hardtabs=8 report=5 ttytype=vt100
noignorecase scroll=11 warn
nolisp sections=NHSHH HUuhsh+c window=23
nolist shell=/bin/ksh wrapscan
magic shiftwidth=8 wrapmargin=0
mesg noshowmatch nowriteany

For C-Shell:
setenv EXINIT “set nu”
For Bourne or Korn Shell:
EXINIT=”set nu”; export EXINIT
For Korn Shell Only (alternate method):
typeset -x EXINIT=”set nu”
在 .profile 里设置 vi 的环境选项 , 以上均测试过
以上的查阅vim帮助文档,太多了不一一解释了

18.标记文本

mchar   用字母char标记当前光标的位置
`char   移至char所标记处
‘char   移至char标记所在行的开头处
“     移至当前行上一次所在位置(在光标移动之后)――一个双引号
”    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号0.
头两个和最后一个就已经挺好用的了

19.
同时vi多个文件时,CTRL-SHIFT-6回到上一个文件,在本次vi的文件和上次vi的文件之间切换。
但是我发现一个BUG:在用CTRL-SHIFT-6切换到上一个文件后,用:args查看多文件vi状态时,
屏幕底部仍然显示目前vi的是刚才的文件。
(在HP-UX,Solaris,AIX上通过)
也可以使用:
:e#
进行切换
ctrl+shift+6=:e#回到上一个文件,哇哈哈,终于找到了,对应的是:next简写为:n到下个文件,用files貌似更能看清当前打开的文件列表

20.
sco 下VI 要在文本前同样的字符加用
%s/^/要加的内容/g 要在文本后同样的字符加
%s/$/要加的内容/g
汗,这样利用查找替换

21.
如何去掉文本中的 ^M 硬回车?不必用binary传回去再ascii传回来的方式,用shell或者unix语句实现。

cat filename |tr -d ‘015′ >newfile
不同的unix系统还存在一些其他不同的命令,如:doscp
sed 也可以实现这个功能.

dos2unix filename filename2
反之
unix2dos filename filename2

在vi 中用:$s/^M//g
^是crtl-V crtl-M
我常用的是dos2unix

22.如何在”unix命令行”下将一个文件的某字符串用另一个串换掉

sed ’s/string1/string2/gp’ file1 > file2

23.将/etc/hosts下所有的地址都ping 2次

1 #/usr/bin/sh
2 #grad /etc/hosts and ping each address
3 cat /etc/hosts|grep -v ‘^#’ | while read LINE
4 do
5 ADDR=`awk ‘{print $1}’`
6 for MACHINE in $ADDR
7 do
8 ping $MACHINE -n 2
9 done
10 done

24.
到前一个函数[[ ,到下一个函数]] ,括号配对% ,交叉参考Ctrl_] (事先用ctags做索引),回来用e# ` 编辑一个函数:vi -t 函数名 ,编辑加密文本vi -X
%括号匹配我介绍过,:e#回来可以用ctrl+o替代,更优雅

25.
在插入模式下ctrl+p,自动补齐剩余单词,以赖规则:tags,以有的单词等等
还ctrl_n呢

 

  • 在编辑模式下,可通过gqap命令对注释自动断行(每行字符个数可通过命令模式下的”set textwidth=个数”设定)
  • 命令模式下输入数字可以直接跳到指定行,也可在打开文件时用“vim +数字 文件名”实现相同的功能。
  • 命令模式下的TOhtml命令可把C语言输出为html文件,结合syntax on,可产生比较好的web page把代码发布出去。
  • 先切换到可视模式(编辑模式下按字母v可切换过来),用光标选中一片代码,然后通过命令模式下的命令“s#^#//#g”把某一片代码给注释掉,这非常方便调试某一片代码的功能。
  • 命令模式下的”set paste“可解决复制本来已有缩进的代码的自动缩进问题,后可执行”set nopaste“恢复自动缩进。
  • 为了使用最新的vim特性,可用”set nocp”取消与老版本的vi的兼容。
  • 如发现变量命名不好,想在整个代码中修改,可在命令模式下用”%s#old_variable#new_variable#g”全局替换。替换的时注意变量名是其他变量一部分的情况。
  • 如果想把缩进和TAB键替换成空格,可考虑设置expandtab,即“set et”,如果要把以前编写的代码中的缩进和TAB键都替换掉,可以用retab。
  • 为实现关键字补全,输入一部分字符后,按下CTRL+P即可。比如先输入prin,然后按下CTRL+P就可以补全了。
  • 如果想在在编辑模式下查看Linux手册,可把光标定位到在某个函数,按下Shift+k就可以调出man,很有用。
  • 删除空行,在命令模式下输入g/^$/d,前面g命令是扩展到全局,中间是匹配空行,后面d命令是执行删除动作。用替换也可以实现,键入%s#^##g,意思是把所有以换行开头的行全部替换为空。类似地,如果要把多个空行转换为一个可以输入g/^$/d或者%s#^$##g。
  • 注意使用一些有用的插件,比如ctags, cscope等,可以提高代码阅读、分析的效率。特别是open source的东西。


  • 没有评论 »

    我的vi及其linux命令

    十月 25, 2008 | tools | RSS 2.0

    :%s/r//g 删除dos方式的回车^m 
    :%s= *$== 删除行尾空白 

    :%s/^(.*)n1/1$/ 删除重复行 

    :%s/^.{-}pdf/new.pdf/ 只是删除第1个pdf 

    :%s/<!–_.{-}–>// 又是删除多行注释(咦?为什么要说“又”呢?) 

    :g/s*^$/d 删除所有空行 :这个好用有没有人用过还有其他的方法吗?
    :g!/^dd/d 删除不含字符串dd的行 
    :v/^dd/d 同上 (译释:v == g!,就是不匹配!) 

    :g/str1/,/str2/d 删除所有第1个含str1到第1个含str2之间的行 

    :v/./.,/./-1join 压缩空行 
    :g/^$/,/./-j 压缩空行 

    ndw 或 ndw 删除光标处开始及其后的 n-1 个字符. 
    d0 删至行首. 
    d$ 删至行尾. 
    ndd 删除当前行及其后 n-1 行. 
    x 或 x 删除1个字符. 
    ctrl+u 删除输入方式下所输入的文本. 
    ^r 恢复u的操作 
    j 把下1行合并到当前行尾 
    v 选择1行 
    ^v 按下^v后即可进行矩形的选择了 
    aw 选择单词 
    iw 内部单词(无空格) 
    as 选择句子 
    is 选择句子(无空格) 
    ap 选择段落 
    ip 选择段落(无空格) 
    d 删除到行尾 
    x,y 删除与复制包含高亮区 

    dl 删除当前字符(与x命令功能相同) 
    d0 删除到某1行的开始位置 
    d^ 删除到某1行的第1个字符位置(不包括空格或tab字符) 
    dw 删除到某个单词的结尾位置 
    d3w 删除到第3个单词的结尾位置 
    db 删除到某个单词的开始位置 
    dw 删除到某个以空格作为分隔符的单词的结尾位置 
    db 删除到某个以空格作为分隔符的单词的开始位置 
    d7b 删除到前面7个以空格作为分隔符的单词的开始位置 
    d) 删除到某个语句的结尾位置 
    d4) 删除到第4个语句的结尾位置 
    d( 删除到某个语句的开始位置 
    d) 删除到某个段落的结尾位置 
    d{ 删除到某个段落的开始位置 
    d7{ 删除到当前段落起始位置之前的第7个段落位置 
    dd 删除当前行 
    d/text 删除从文本中出现“text”中所指定字样的位置, 
    1直向前直到下1个该字样所出现的位置(但不包括该字样)之间的内容 
    dfc 删除从文本中出现字符“c”的位置,1直向前直到下1个该字符所出现的位置(包括该字符)之间的内容 
    dtc 删除当前行直到下1个字符“c”所出现位置之间的内容 
    d 删除到某1行的结尾 
    d$ 删除到某1行的结尾 
    5dd 删除从当前行所开始的5行内容 
    dl 删除直到屏幕上最后1行的内容 
    dh 删除直到屏幕上第1行的内容 
    dg 删除直到工作缓存区结尾的内容 
    d1g 删除直到工作缓存区开始的
    缩进多行
    1、按v进入visual状态,选择多行,用>或<缩进或缩出
    2、将光标移动到要移动的块的第1行行首,再按n>j,n为要缩进的行数
    3、如果编辑的是代码文件,可以将光标放在{或者}上,然后按=%,vim将自动将里面的代码块进行缩进
    复制多行
    命令行模式下输入
    :5,10 co 12
    光标移到起始行,输入ma
    光标移到结束行,输入mb
    光标移到粘贴行,输入mc
    移动多行
    :5,10move12
    :5,10m12
    然后 :’a,’b co ‘c

    光标放到第5行,
    输入:y6y
    光标放到第12行,
    输入:p
    查找目录下包含某个文件

    find   yourdir   -type   f   -name   “*”   |   xargs   grep   yourstring
    备份
    ls | xargs -i cp {} {}.bak
    计算文件第1行的字数

    cat yourfile |xargs -i echo echo ‘{}’|wc -c|sh
    2008年12月10日13:52:29
    vi的帮助
    1 :help is your friend;
    查询模式
    :help i_;help v_ ;
    查询某个命令:
    :help x;
    :help zf;
     ctrl+] 跳到标志处 ctrl + t 跳回去
    2 vi的位置及其移动:
    大致位置:ctrl+g
    详细位置:gctrl+g
    set runler
    gg,g
    ng,ngg
    n%
    标志位:ma,mb
    ‘<letter>跳转到标志位
    、<leter>
    查看你现在定义的标志位:marks
    c’<leter>改变到标志位
    d’<lette>
    =’<letter>格式化1段文字,到标志位
    gg=vg对全文进行格式化
    ”在两个地方移动
    ‘.跳转到最后修改的地方
    ctrl+o,ctrl+t在历史记录移动
    ctrl-o    跳到上1位置
    ctrl-i    跳到下1位置
    ctrl-y    向上滚屏
    ctrl-e    向下滚屏
    ctrl-u    向上滚半屏
    ctrl-d    向下滚半屏
    ctrl-b    向上滚1屏
    ctrl-f    向下滚1屏
    3 vi的插入
    好的习惯:
    ctrl+y,ctrl+e
    ctrl+a对1行中的数字进行自加
    查找
    f/f,t/t,df;df;删除从鼠标到第1个;的部分
    *#查找这个单词
    g*#查找这个单词的部分
    [i列出鼠标下的单词
    / ?搜索
    d/^#删除从鼠标到#位置的部分
    1 vip 选择1段文字进入虚拟模式,没有空白
    文本
     das 删除1个句子,包括空白
    拆分窗口
    new    打开新的空窗口
    split    水平拆分窗口
    vsplit    垂直拆分窗口
    split socket.c    在新窗口中打开socket.c文件
    5ctrl-w+    将窗口高度增加5行
    10ctrl-w-    将窗口高度减少10行
    ctrl-wctrl-w    在窗口间切换
    :set ignorecase    设置忽略大小写
    :set noignorecase    不忽略大小写

    linux批量替换多个文件中字符串

    用sed命令可以批量替换多个文件中的字符串.
    sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
    例如:我要把mahuinan替换为huinanma,执行命令:
    sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www'
    这是目前linux最简单的批量替换字符串命令了!
    具体格式如下:
    sed -i "s/oldstring/newstring/g" `grep oldstring -rl /path`
    实例代码:
    sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl /usr/aa`
    sed -i "s/大小多少/日月水火/g" `grep 大小多少 -rl ./`
    sed单行命令可以和find, xargs结合起来,完成对多个文件的文本替换.如
    find . -name "*.[ch]” -exec sed -i ’s/t/    /g’ {} ;
    或者 find . -name “*.[c|h]” | xargs sed -i ’s/t/   /g’
    都可以把当前目录下的.c .h文件中的tab替换成4个空格.
    sed提供的域提取功能可以进行比较复杂的替换如
    “sed ’s/(//*)(.*)//*2*//‘  test.c”
    将把test.c中所有的如”//comment” “int a; //comment” “//////////////////”替换成”/*comment*/” “int a; /*comment*/” “/**/”(因为严格ascii c 只允许这种格式的注释)

    批量替换文件中的字符:
    find . -name “space.share.*” | xargs sed -i ’s/320/200/g’
    find . -name “^space.share.*” | xargs sed -i ’s/200/share_pic_width/g’

    替换1段程序中的行号:
    :%s/[0-9]{1,2}//;
    :%s/^[[:space:]]+//
    :%s/^[[:space:]]+[0-9]{1,2}//

    2008年12月11日18:04:53
    插入模式下,自动补全:
    ctrl+p向后搜索
    ctrl+n上前搜索
    补全文件名
    ctrl+x,ctrl+f
    程序源码自动补全
    ctrl+x,ctrl+o;
    重复上1次插入模式下的内容
    ctrl+a
    从其他行复制
    ctrl+y;
    ctrl+r插入寄存器的内容
    对齐文本
    1,2left30

     增加注释(1个操作应用在多行)
    比如需要增加#或者是//这种注释:
    ctrl + v 定位到开始行,然后选定需要的行,然后执行 i 命令,然后输入 # 或 //,然后按esc键两次,即可把注释操作应用到所有选定的行,记住选定不能使用v指令,而应该使用ctrl + v(清除注释请参考上面的方法)(v是按行选定,ctrl + v 是按照列选定)

     对齐行
    v 选定需要整齐的行,输入 = 进行归整

       :g/^/exec “s/^/”.strpart(line(”.”).” “, 0, 4)   在行首插入行号
       :runtime! syntax/2html.vim                      转换 txt 成 html, 会按照你的

      <<                  输入此命令则光标所在行向左移动1个 tab.
      >>                  输入此命令则光标所在行向右移动1个 tab.
      5>>                 输入此命令则光标后 5 行向右移动1个 tab.
      :12,24>             此命令将12行到14行的数据都向右移动1个 tab.
      :12,24>>            此命令将12行到14行的数据都向右移动两个 tab.

    替换多个文件内容的东西

          1 #!/bin/bash
          2
          3
          4 for i in `ls space.*`
          5 do
          6     sed “s|<!–{if !empty($this->_visiteduser->_gender)&&($this->_visiteduser->_gender)==’m'}–>他<!–{else}–>她<!-  -{/if}–>|{1}|g” $i > $i-new
          7     #mv $i $i-old
          8     mv $i-new $i
          9 done
    继续学习vi

    寄存器操作
    “?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为1个字母,n为1个数字
    “?nyw:将当前行及其下n个字保存到寄存器?中,其中?为1个字母,n为1个数字
    “?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为1个字母,n为1个数字
    “?p:取出寄存器?中的内容并将其放到光标位置处.这里?可以是1个字母,也可以是1个数字
    ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中.
    淫技
    2. 清除页面中所有行尾的空白符:
    :%s/s+$//

    3. 清除所有空白
    :%s/(s*)+//

    4. 去掉所有的//注释
    :%s!s*//.*!!

    5. 去掉所有的/* */注释
    :%s!s*/*_.{-}*/s*!
    【9】窗口操作
    :vne [filename]
    :sp [filename]
    :s [filename]
    :new [filename]
    :^w + ^r 交换两个窗口的位置
    ^w = 窗口等宽
    :res -n 窗口高度减小n
    :res +n 窗口高度增大n
    :vert res -n
    :vert res +n
    【12】删除操作
    :%s/r//g 删除dos方式的回车^m
    :%s= *$== 删除行尾空白
    :%s/^(.*)n1/1$/ 删除重复行
    :%s/^.pdf/new.pdf/ 只是删除第1个pdf
    :%s/<!–_.–>// 又是删除多行注释(咦?为什么要说“又”呢?)
    :g/^s*$/d 删除所有空行
    :g!/^dd/d 删除不含字符串’dd’的行
    :v/^dd/d 同上 (译释:v == g!,就是不匹配!)
    :g/str1/,/str2/d 删除所有第1个含str1到第1个含str2之间的行

    :v/./.,/./-1join 压缩空行
    :g/^$/,/./-j 压缩空行
    【15】大小写转换
    guu 行小写
    guu 行大写
    g~~ 行翻转(当然指大小写啦)
    guw 字小写(狭义字) 译注:建议对比iw
    guw 字大写(狭义字)
    g~w 字翻转(狭义字)
    veu 字大写(广义字)
    ve~ 字翻转(广义字)
    gggug 把整个文章全部小写(ft!bt!)

    【16】 跳转足迹’. 跳到最后修改的那1行 (超级有用)(ft,怎么又是这个评价)
    `. 不仅跳到最后修改的那1行,还要定位到修改点
    <c-o> 依次沿着你的跳转记录向回跳 (从最近的1次开始)
    <c-i> 依次沿着你的跳转记录向前跳
    :ju(mps) 列出你跳转的足迹
    列块操作
    <c-v>选中列块
    i<string><esc> 在块的每1行首加上string
    a<string><esc> 在块的每1行尾加上string
    c<string><esc> 修改选中的列块(即删除并输入新内容 )
    自动补齐
    ctrl-x ctrl-f 文件名
    ctrl-x ctrl-l 整行
    ctrl-x ctrl-d 宏定义 (并搜索所包含的文件)
    ctrl-x ctrl-i 当前文件以及所包含的文件
    ctrl-x ctrl-k 词典文件内的单词
    ctrl-x ctrl-t 近义词词典文件内的单词
    ctrl-x ctrl-] 标记
    ctrl-x ctrl-v vim 命令行
    c<string><esc> 修改选中的列块(即删除并输入新内容 )
    “””””””””””::自动加注释的*星号””””””””””””””””””””””””””””””””””””””””””””””””””

    vi扩展的正则表达式
    | 指示交替,如home|house 指匹配home或house
    () 用于分组,如home|house可以写为ho(me|use)
    *可以用到()上(home|house)* 可以匹配home, homehouse,househome, homehousehomehouse
    (…) 实际匹配的文本可以使用、等在替换命令的替换部分进行检索
    + 可匹配正则表达式的1次或多次出现,既可以是单个字符也可以是()或(…)括起的内容,至少匹配1次
    ho(use|me)+ 指至少是house或home不允许是空
    ? 指前面正则表达式的0次或1次出现,表示出现或未出现.如free?d 将匹配fred或freed除此不能匹配其他文本

    定义区间表达式.区间表达式描述了表示重复次数的计数数字. 同
    (home|house) 只能匹配homehome, homehouse, househome, househouse   

    ///////////////// 记1条复复杂的命令

    grep -i ‘china’ 01-www-access-log | grep -vi ‘welcome2′ | grep -vi ’spider’ | grep -vi ‘yahoo’| grep -vi ‘head’ | awk ‘{print $1}’|sort | uniq -c | sort -n | wc -l

    shell
    dir=$1
    files=`find $dir -type f`
    for file in $files
    do
        dir_name=`dirname $file`
        ori_filename=`basename $file`
        
        new_filename=`echo $ori_filename | tr [:upper:] [:lower:]` > /dev/null
       
        mv $dir_name/$ori_filename $dir_name/$new_filename
    done

    比如说:19******/01/03,改写以后是:03/01/19******
    sed ’s/([0-9]{4})/([0-9]{2})/([0-9]{2})/3/2/1/g’ date.txt
    删除文件中含有”[ ]“的行,中括号之间有1个空格
    sed ‘/[ ]/d’ kuohao
    模式空间的正则表达式为 modules/([^/ ]*)/.*

    (…)
    在此处表示确定…的内容将会被存放到1个地址中,以后想得到此出地址可用x (x取决于之前是否有起同样作用的()出现,如果有1个,那么x=2,如果没有x=1,以此类推)来获得

    / 转义 / (反斜杠)

    ([^/ ]*) 匹配 [^/ ]*

    [^/ ]表示 非/ 字符,[^/]表示 非/ 字符重复0或多次.

    .* 匹配1串任意字符
    $ sed -e ‘/abcde/{n;s// /}’ hebing.txt

    #!/bin/sh
    home_dir=/home/ibmtc/personal
    pid=1001
    while read line;
    do
        #user name is lower
        name=`echo $line | tr [:upper:] [:lower:]`
        #but the original directory is upper
        echo $name:x:$pid:$pid::$home_dir/$line:/sbin/nologin >> usersfile
        let “pid+=1″
    done

    for name in $@
    do
        sed -i “/$name/s//sbin/nologin//bin/sh/” usersfile
    done

    这里,利用1个变量来作为pattern,直接的使用
    sed -i ‘/$name/s//sbin/nologin//bin/sh/’ usersfile
    是不行的

    感谢linuxsir上的热心网友回答我的问题,找到了解决方法.

    sed -i '/'$name'/s//sbin/nologin//bin/sh/' usersfilesed -i "/$name/s//sbin/nologin//bin/sh/" usersfile

    find $dir -atime 7 -print0 | xargs -r0 rm–

    find-path “/path/dir” -prune -o -print :
    find-path /path/dir -prune -o -print
    是1样的效果
    find( -path “/path/dir1″ -o -path”/path/dir2″ ) -prune -o-print
    :
    find( -path /path/dir1″ -o -path”/path/dir2 ) -prune -o-print
    是1样的,

    没有评论 »

    vi

    十月 25, 2008 | tools, 数据结构算法 | RSS 2.0

    缩进多行
    1、按v进入visual状态,选择多行,用>或<缩进或缩出
    2、将光标移动到要移动的块的第一行行首,再按n>j,n为要缩进的行数
    3、如果编辑的是代码文件,可以将光标放在{或者}上,然后按=%,vim将自动将里面的代码块进行缩进
    复制多行
    命令行模式下输入
    :5,10 co 12
    光标移到起始行,输入ma
    光标移到结束行,输入mb
    光标移到粘贴行,输入mc

    然后 :’a,’b co ‘c

    光标放到第五行,
    输入:y6y
    光标放到第12行,
    输入:p

    没有评论 »

    比较全的vi命令

    九月 11, 2008 | tools | RSS 2.0

    VIM是一款增强的vi编辑器,可以独立运行与pc上,支持诸如win,linux等多种操作系统,并且它是开源免费的。

    它也是一款很好用的开发工具,通过修改配置文件,可以将它打造成一个强悍的开发工具。

    它继承了linux下vi的操作指令,使用起来相当方便!

    我下载了win版本安装,感觉就是一个增强的记事本,但是比win自带的记事本功能强大,完全支持vi命令,所以操作起来很方便。下面看看我安装后的界面:

    下面是它的操作指令及最为一个IDE的一些配置方法:

    【1】文件操作
    vi FileName 打开文件 FileName,并将光标置于第一行首。
    vi +n FileName 打开文件 FileName,并将光标置于第 n 行首。
    vi + FileName 打开文件 FileName,并将光标置于最后一行。
    vi + /pattern File 打开文件 File,并将光标置于其中第一个于 pattern 匹配的字符串处。
    vi –r FileName 在上次正用 vi 编辑 FileName 发生系统崩溃后,恢复FileName。
    vi File1 … Filen 打开多个文件,依次对之进行编辑。
    :%!xxd 按十六进制查看当前文件
    :%!xxd -r 从十六进制返回正常模式
    :n1,n2 co n3 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
    :n1,n2 m m3 将 n1 行到 n2 行之间的内容移至第 n3 行下。
    :n1,n2 d 将 n1 行到 n2 行之间的内容删除。
    :n1,n2 w filename 将 n1 行到 n2 行之间的内容保存到文件 filename 中
    :n1,n2 w! Command 将文件中n1行到n2行的内容作为 Command的输入并执行之,
    若不指定 n1、n2,则将整个文件内容作为 Command 的输入。
    :r! Command 将命令 Command 的输出结果放到当前行。
    :nr <文件> 把<文件>插入到第n行
    :so <文件> 读取<文件>,再执行文件里面的命令(文件中的命令应该都是一些ex命令)
    :l1,l2w <文件> 把第l1和第l2行之间的文本写到<文件>中去
    :w >> <文件> 添加到<文件>末尾. 也可以使用行号
    :e! 重新编辑当前文件,忽略所有的修改

    ·(、[、、]、)对应显示
    % 显示当前(、[、{ 、}、] 、)的对应项
    ) 显示对应的(
    ) 显示对应的[
    ] 显示对应的{

    ·(、[、、]、)内数据选择
    daB 删除{}及其内的内容 (在非v可视模式下)
    diB 删除{}中的内容
    ab 选择()中的内容
    ib 选择()中的内容( 不含() )
    aB 选择{}中的内容
    iB 选择{}中的内容( 不含{} )
    ·语法提示与自动补齐
    ★ <C-N><C-P> 插入模式下的单词自动完成
    ★ <C-X><C-L> 行自动完成(超级有用)
    【2】·设置ctags
    #ctags -f /usr/share/vim/vim63/funcs.tags -R /opt/j2sdk/src /usr/src/kernels/2.6.9-5.EL-i686
    ^p 自动补齐上下文已有相近项
    ^n 自动补齐~/.tags中的相近函数
    ^[ 显示~/.tags中的光标下的函数的原型,
    按^t退出函数
    :pta 函数名 预览窗口快速打开相应函数所在文件,并将光标定位在对应函数的开头
    K 显示光标下的C函数的man说明手册
    ·变量定位
    gd 转到光标下局部变量的定义处
    Gd 转到光标下全局变量的定义处

    ·编译选项
    :cn 命令会把你带到下一个出错地点,而不考虑它在什么文件里。
    :cc 命令会向你显示当前错误的编译器输出信息;
    :cl 会生成一个列有项目所有错误的列表,以供浏览这些错误

    【3】光标移动
    ·字符
    h 光标左移一个字符。
    l 光标右移一个字符。
    ·字
    w 或 W 光标右移一个字至字首。
    B 或 b 光标左移一个字至字首。
    E 或 e 光标右移一个字至字尾。
    ·句} 光标移至句尾。
    ( 光标移至句首。
    ·段) 光标移至段落开头。
    { 光标移至段落结尾。
    ·行k 或 Ctrl+p 光标上移一行。
    j 或 Ctrl+n 光标下移一行。
    Enter 光标下移一行。
    nG 光标移至第 n 行首。
    n+ 光标下移 n 行。
    n- 光标上移 n 行。
    n$ 光标移至第 n 行尾。
    0 光标移至当前行首。
    $ 光标移至当前行尾。
    ·屏幕
    H 光标移至屏幕顶行。
    M 光标移至屏幕中间行。
    L 光标移至屏幕最后行。
    Ctrl+u 向文件首翻半屏。
    Ctrl+d 向文件尾翻半屏。
    Ctrl+f 向文件尾翻一屏。
    Ctrl+b 向文件首翻一屏。
    nz 将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶。
    【4】插入
    # 在文件中插入行号(不是显示行号,是插入!)
    ★:g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
    ·光标
    i 在光标前插入。
    a 在光标后插入。
    ·行
    I 在当前行首插入。
    A 在当前行尾插入。
    o 在当前行之下一新行插入。
    O 在当前行之上新开一行插入。

    【5】替换
    r 替换当前字符。
    R 替换当前字符及其后的字符,直至按 ESC 键。
    s 从当前光标位置处开始,以输入的文本代替指定数目的字符。
    S 删除指定数目的行,并以所输入的文本代替。
    【6】修改
    ncw 或 nCW 修改指定数目的字符。
    nCC 修改指定数目的行。
    :r filename 将文件 filename 插入在当前行之下

    【7】查找替换
    /<C-R><C-W> 把狭义单词 <cword> 写到 搜索命令 行
    /<C-R><C-A> 把广义单词 <cWORD> 写到 搜索命令 行
    :g/str/s/str1/str2/g
    第一个g表示对每一个包括s1的行都进行替换,
    第二个g表示对每一行的所有进行替换
    包括str的行所有的str1都用str2替换
    :%s/f $/for$/g 将每一行尾部的“f ”(f键和空格键)替换为for
    :%s/^/mv /g 在每一行的头部添加“mv ”(mv键和空格键)
    :s/fred/<c-r>a/g 替换fred成register a中的内容,呵呵

    :g/<input|<form/p 显示含<input或<form的行

    # 替换一个visual区域
    # 选择一个区域,然后输入 :s/Emacs/Vim/ 等等,vim会自动进入:模式
    :'<,'>s/Emacs/Vim/g 前面的'<,'>是vim自动添加的

    # 在多个文档中搜索
    :bufdo /searchstr
    :argdo /searchstr

    【8】复制与剪切
    xp 交换前后两个字符的位置
    ddp 上下两行的位置交换
    :g/fred/t$ 拷贝行,从fred到文件末尾(EOF)

    【9】窗口操作
    :vne [filename]
    :sp [filename]
    :S [filename]
    :new [filename]
    :^w + ^r 交换两个窗口的位置
    ^w = 窗口等宽
    :res -n 窗口高度减小n
    :res +n 窗口高度增大n
    :vert res -n
    :vert res +n

    【10】DOS格式文本转成Unix格式文本
    :1,$s/^M//g

    【11】书签
    在阅读和编写大的程序文件时,利用标记(书签)功能定位是十分有帮助的。
    将光标移到想做标记的位置。假如做一个名为“debug1”的标记,那么用户可在命令模式下输入做标记的命令“mdebug1”,然后敲入回车键,一个名为“debug1”的标记就做好了。
    接下来用户可以随意将光标移到其它的位置,当在命令模式下输入“`debug1”后,就能快速回到“debug1”的标记所在行的行首。

    【12】删除操作
    :%s/r//g 删除DOS方式的回车^M
    :%s= *$== 删除行尾空白
    :%s/^(.*)n1/1$/ 删除重复行
    :%s/^.pdf/new.pdf/ 只是删除第一个pdf
    :%s/<!–_.–>// 又是删除多行注释(咦?为什么要说「又」呢?)
    :g/^s*$/d 删除所有空行
    :g!/^dd/d 删除不含字符串’dd’的行
    :v/^dd/d 同上 (译释:v == g!,就是不匹配!)
    :g/str1/,/str2/d 删除所有第一个含str1到第一个含str2之间的行

    :v/./.,/./-1join 压缩空行
    :g/^$/,/./-j 压缩空行
    ndw 或 ndW 删除光标处开始及其后的 n-1 个字符。
    d0 删至行首。
    d$ 删至行尾。
    ndd 删除当前行及其后 n-1 行。
    x 或 X 删除一个字符。
    Ctrl+u 删除输入方式下所输入的文本。
    ^R 恢复u的操作
    J 把下一行合并到当前行尾
    V 选择一行
    ^V 按下^V后即可进行矩形的选择了
    aw 选择单词
    iw 内部单词(无空格)
    as 选择句子
    is 选择句子(无空格)
    ap 选择段落
    ip 选择段落(无空格)
    D 删除到行尾
    x,y 删除与复制包含高亮区
    dl 删除当前字符(与x命令功能相同)
    d0 删除到某一行的开始位置
    d^ 删除到某一行的第一个字符位置(不包括空格或TAB字符)
    dw 删除到某个单词的结尾位置
    d3w 删除到第三个单词的结尾位置
    db 删除到某个单词的开始位置
    dW 删除到某个以空格作为分隔符的单词的结尾位置
    dB 删除到某个以空格作为分隔符的单词的开始位置
    d7B 删除到前面7个以空格作为分隔符的单词的开始位置
    d) 删除到某个语句的结尾位置
    d4) 删除到第四个语句的结尾位置
    d( 删除到某个语句的开始位置
    d) 删除到某个段落的结尾位置
    d{ 删除到某个段落的开始位置
    d7{ 删除到当前段落起始位置之前的第7个段落位置
    dd 删除当前行
    d/text 删除从文本中出现“text”中所指定字样的位置,
    一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
    dfc 删除从文本中出现字符“c”的位置,一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容
    dtc 删除当前行直到下一个字符“c”所出现位置之间的内容
    D 删除到某一行的结尾
    d$ 删除到某一行的结尾
    5dd 删除从当前行所开始的5行内容
    dL 删除直到屏幕上最后一行的内容
    dH 删除直到屏幕上第一行的内容
    dG 删除直到工作缓存区结尾的内容
    d1G 删除直到工作缓存区开始的内容
    修改命令操作
    r 更改当前字符
    cw 修改到某个单词的结尾位置
    c3w 修改到第三个单词的结尾位置
    cb 修改到某个单词的开始位置
    cW 修改到某个以空格作为分隔符的单词的结尾位置
    cB 修改到某个以空格作为分隔符的单词的开始位置
    c7B 修改到前面7个以空格作为分隔符的单词的开始位置
    c0 修改到某行的结尾位置
    c} 修改到某个语句的结尾位置
    c4} 修改到第四个语句的结尾位置
    c( 修改到某个语句的开始位置
    c) 修改到某个段落的结尾位置
    c{ 修改到某个段落的开始位置
    c7{ 修改到当前段落起始位置之前的第7个段落位置
    ctc 修改当前行直到下一个字符c所出现位置之间的内容
    C 修改到某一行的结尾
    cc 修改当前行
    5cc 修改从当前行所开始的5行内容
    . 重复上一次修改!

    【13】Set 选项设置
    set all 列出所有选项设置情况。
    set term 设置终端类型。
    set ignorecase 在搜索中忽略大小写。
    set list 显示制表位(^I)和行尾标志($)。
    set number 显示行号。
    set showmode 示用户处在什么模式下
    set report 显示由面向行的命令修改国的行数目。
    set terse 显示简短的警告信息。
    set warn 在转到别的文件时,若没有保存当前文件则显示 No write 信息。
    set autowrite 在“:n”和“:!”命令之前都自动保存文件
    set nomagic 允许在搜索模式中,使用前面不带的特殊字符。
    set nowrapscan 禁止 vi 在搜索到达文件两端时,又从另一端开始。
    set mesg 允许 vi 显示其他用户用 write 写到自己终端上的信息。
    autoindent (ai) noai 使新行自动缩进,和上(下)行的位置对齐
    autoprint (ap) ap 每条命令之后都显示出修改之处
    autowrite (aw) noaw 在:n,:!命令之前都自动保存文件
    beautify (bf) nobf 在输入的时候忽略所有的控制字符(除了制表键(tab),换行(newline),进纸(formfeed))
    directory= (dir=) /tmp 存放缓冲区的目录名
    edcompatible noedcompatible 在替换的时候使用类ed的用法
    errorbells (eb) errorbells 出错的时候响铃
    exrc (ex) noexrc 允许在主目录(home)外面之外放.exrc文件
    hardtabs= (ht=) 8 设置硬制表的边界
    ignore case (ic) noic 正规式里忽略大小写
    lisp nolisp 打开lisp模式
    list nolist 显示所有的制表键和行的结尾
    magic agic 可以使用更多的正规表达式
    mesg mesg 允许向终端发送消息
    number (nu) nonumber 显示行号
    open open 允许开放和可视化
    optimize (opt) optimize 优化吞吐量,打印时不发回车
    paragraphs= (para=) IPLPPPQPPLIbp 设置{ & }的分界符
    prompt prompt 命令模式下的输入给出:的提示符
    readonly (ro) noro 除非用!号否则不准保存文件
    redraw noredraw 当编辑的时候重绘屏幕
    remap remap 允许宏指向其他的宏
    report= 5 如果影响的行数>这个数的话就报告
    scroll 1/2 window 下卷屏幕时滚动屏幕的数目, 同样这也是z命令输出的行数(z 输出2倍滚屏的大小)
    sections= SHNHH HU 定义节的末尾(当使用命令[[ 和 ]] 时)
    shell= (sh=) /bin/sh 缺省的SHELL,如果设置了环境变量SHELL的话,就使用变量
    shiftwidth= (sw=) 8 当使用移动(shift)命令时移动的字符数
    showmatch (sm) nosm 显示{, }, (, ), [, 或者 ] 的匹配情况
    showmode noshowmode 显示你处在什么模式下面
    slowopen (slow) 插入之后不要立刻更新显示
    tabstop= (ts=) 8 设置制表停止位(tabstop)的长度
    taglength= (tl=) 0 重要标记的字符个数(0表示所有的字符)
    tags= tag, /usr/lib/tags 定义包含标记的文件路径
    term= 设置终端类型
    terse noterse 显示简短的错误信息
    timeout (to) timeout 一秒钟后键盘映射超时
    ttytype= 设置终端类型
    warn warn 显示”No write since last change”信息
    window= (w=) 可视模式下窗口的行数
    wrapmargin= (wm=) 0 右边距,大于0的话最右边的单词将折行,留出n个空白位置
    wrapscan (ws) ws 查找到文件尾后再重头开始
    writeany (wa) nowa 可以保存到任意一个文件去

    【14】特殊字符
    ^ 匹配字符串位于行首。
    $ 匹配字符串位于行尾。
    . 用在模式串中,表示任何单个字符。
    在命令模式下,重复上次的命令。
    * 在模式串中,表示其前字符可出现任意多次。
    [] 用在模式串中,表示指定方位内字符,其中可用-表示一个字
    符范围,用^表示不在某个范围内的字符。
    ESC 从插入状态转换到命令状态
    ^[ 功能同 ESC

    【15】大小写转换
    guu 行小写
    gUU 行大写
    g~~ 行翻转(当然指大小写啦)
    guw 字小写(狭义字) 译注:建议对比iw
    gUw 字大写(狭义字)
    g~w 字翻转(狭义字)
    vEU 字大写(广义字)
    vE~ 字翻转(广义字)
    ggguG 把整个文章全部小写(ft!bt!)

    【16】 跳转足迹'. 跳到最后修改的那一行 (超级有用)(ft,怎么又是这个评价)
    `. 不仅跳到最后修改的那一行,还要定位到修改点
    <C-O> 依次沿着你的跳转记录向回跳 (从最近的一次开始)
    <C-I> 依次沿着你的跳转记录向前跳
    :ju(mps) 列出你跳转的足迹
    【17】命令历史
    :history 列出历史命令记录
    :his c 命令行命令历史
    :his s 搜索命令历史
    q/ 搜索命令历史的窗口
    q 命令行命令历史的窗口
    :<C-F> 历史命令记录的窗口
    【18】寄存器
    # 列出寄存器(Registers)
    :reg 显示所有当前的registers
    "1p 表示引用register,1表示一个名字叫做1的register,p就是粘贴(paste)命令
    译释:
    "也用来定义register
    先输入 ",表示定义register
    然后输入名字,如0~9,a~z
    然后执行删除或复制命令,如dd或y,
    或者是visual模式下的d(删除选中的部分)或y(复制选中的部分)
    则被删除或复制的部分就被存入了这个命名的register
    观察:一个特殊的register, "" ,里面存储了一个匿名的删除/复制
    在你执行dd或y的时候,被作用的部分被存到了""中
    【19】命令行
    "ayy@a 把当前行作为一个Vim命令来执行
    译释:"ayy 是定义当前行到register a,然后@a是执行register a中存储的指令
    10yy copy 当前行以下10行
    【20】排序
    :%!sort -u 使用sort程序排序整个文件(用结果重写文件)
    !1) sort -u 排序当前段落 (只能在normal模式下使用!!)
    :.,+5!sort 排序当前行及以下5行
    【21】 列操作
    :%s= [^ ]+$=&&= 复制最后一列
    :%s= f+$=&&= 一样的功能
    :%s= S+$=&& ft,还是一样
    :s/(.*).*)/2″1/ 颠倒用:分割的两个字段
    :%s(w+s+))str1:1str2: 处理列,替换所有在第三列中的str1
    :%sw+)(.*s+)(w+)$:321: 交换第一列和最后一列 (共4列)

    ·.vimrc
    ” Use Vim settings, rather then Vi settings (much better!).
    set nocompatible
    “c风格的缩进
    :set expandtab “不使用tab只使用空格
    :set cindent shiftwidth=4
    “自动缩进
    :set ai

    “语法
    “:set filetype=java
    :set syntax=java
    “键入)、] 、},显示(、[、{
    :set showmatch
    "手工定义折叠
    :set foldmethod=manual

    "标签文件位置
    set tags=/usr/share/vim/vim63/funcs.tags
    "在插入模式下通过按[Ctrl]N自动地将任何类、方法或者字段名补齐
    set complete+=k
    ” 不要用声音烦我!
    set visualbell
    “历史
    :set history=50
    “显示行列位置
    :set ruler
    “设置字符编码
    set fileencodings=gb2312
    “set encoding=euc-cn
    “设置ruler
    set ruler
    “显示当前命令
    set showcmd
    “incsearch
    set incsearch
    ” allow backspacing over everything in insert mode
    set backspace=indent,eol,start
    “自动检测文件类型
    :filetype on

    “””””””””””快捷键定义”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””
    if version >= 600
    “查找
    “map <C-H> /
    “查找函数原型
    map <C-H> yiw/^(s)*(sub)|(function)(s)*<C-r>”<CR>
    “继续查找
    map <F3> n

    “使用<F10>显示类、属性、方法列表
    map <F2> :Tlist<CR>
    ” 用compiler定义的编译程序来编译当前程序
    “map <F9> :make “%”<CR>
    “使用<F11>来进行php语法检测
    map <F11> :!php -l “%” <CR>
    map ;w :call FormatText()<CR>
    “查找当前光标下的字
    map <F4> /<C-R><C-W><CR>
    endif
    “””””””””””::快捷键定义”””””””””””””””””””””””””””””””””””””””””””””””””””””””””
    “””””””””””格式化文件”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””
    function FormatText()
    :%s/t/ /g “把t换成4个空格
    :%s/ *$//g “去掉行尾空格
    endfunction
    “””””””””””格式化文件”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””

    “”””””””””显示行尾的tab和多余空格”””””””””””””””””””””””””””””””””””””””””””””””
    set listchars=tab:>-,trail:~
    set list
    syntax match Trail ” +$”
    highlight def link Trail Todo
    “”””””””””::显示行尾的tab和多余空格”””””””””””””””””””””””””””””””””””””””””””””
    function LastMod()
    if line(”$”) > 5
    let l = 5
    else
    let l = line(”$”)
    endif
    exe “1,” . l . “/CnsProgCMTime/s/CnsProgCMTime .*/CnsProgCMTime ” . strftime(”%Y-%m-%d %H:%M:%S”).”/e”
    endfunction
    “map <F5> :call LastMod()<CR>
    “””””””””””自动加注释的*星号””””””””””””””””””””””””””””””””””””””””””””””””””””
    “使用如/* … */ 的注释时,r在插入模式下回车时插入* ;
    “o 在普通模式下,使用 “o” 或 “O” 时插入*
    :set formatoptions=tcro
    “””””””””””::自动加注释的*星号””””””””””””””””””””””””””””””””””””””””””””””””””

    vi扩展的正则表达式
    | 指示交替,如home|house 指匹配home或house
    () 用于分组,如home|house可以写为ho(me|use)
    *可以用到()上(home|house)* 可以匹配home, homehouse,househome, homehousehomehouse
    (…) 实际匹配的文本可以使用、等在替换命令的替换部分进行检索
    + 可匹配正则表达式的一次或多次出现,既可以是单个字符也可以是()或(…)括起的内容,至少匹配一次
    ho(use|me)+ 指至少是house或home不允许是空
    ? 指前面正则表达式的零次或一次出现,表示出现或未出现。如free?d 将匹配fred或freed除此不能匹配其他文本

    定义区间表达式。区间表达式描述了表示重复次数的计数数字。 同
    (home|house) 只能匹配homehome, homehouse, househome, househouse

    编译相关
    ·用编译器来编译 当前文件
    :!perl -c %
    :!php -l % 用php来检查错误
    :!php -q % 用php来运行程序

    ·编译当前程序为a.out并执行该./a.out
    :!gcc % -o a.out && ./a.out
    执行结果
    old umask is %#0
    new umask is %#0
    ·编译错误信息
    :cl! 列出所有错误信息的详细列表
    :cl 列出当前条错误信息
    :cn 列出下一条错误信息
    :cp 列出上一条错误 …

    没有评论 »

    超频

    六月 15, 2007 | tools | RSS 2.0

     今天电脑不知怎么弄的登陆不进去,直接黑屏幕,显示超出范围总后弄出是:

    显卡驱动装错了,后进入安全模式下, 把驱动卸载了,从新再装才算了事。

    没有评论 »

    用好IE浏览器快捷键 做一个有效率的专家

    六月 4, 2007 | tools | RSS 2.0

    ctrl+a 选择全部网页
    ctrl+b或ctrl+i 快速打开收藏夹,整理收藏夹
    ctrl+c 复制当前网页内容
    ctrl+d 将当前页添加到收藏夹
    ctrl+e或ctrl+f3 搜索有键入内容的网页
    ctrl+f 在当前页中查找
    ctrl+h 查看历史记录
    ctrl+l 键入网址进入你想去的网页
    ctrl+n 以当前页打开,它可以快速打开新的网页窗口
    ctrl+p 打印所选的文字
    ctrl+r或f5 刷新当前页
    ctrl+s 保存当前页
    ctrl+w 快速关闭当前窗口
    alt+←/→ 前返/后退一页
    f4 打开地址栏
    f11 切换到全屏幕或常规窗口 申请账户往往时需要在网页的输入框中填写一大堆个人资料,此时可以用Tab/Shift+Tab来切换各输入窗口,前者切到下个输入框,后者返回上个。

      要在浏览器地址栏输入网址,使用Alt+D快捷键可直接把地址栏的信息选中。另外,在地址栏中输入网址时,不用每次都敲完网站URL的全名,如: www.cctv.com,用Alt+D选中地址栏后,直接输入“cctv”再按Ctrl+回车键,浏览器会自动帮助完成www.****.com的填充。

      在一个浏览器窗口浏览网页后,要想返回访问前面的网址,此时可以使用F4键打开地址栏的过往网页菜单,再使用方向键的上、下键选择要查看的过往网页地址。

      一般我们会在收藏夹保存经常访问的网址并随时使用,但大多数都是使用鼠标打开浏览器收藏夹菜单来操作。用Ctrl+I可以快速打开/关闭浏览器窗口左边的收藏夹窗口,然后使用方向键选择,便于查找和管理收藏夹中的网址资料。如要把正在访问的网页加入收藏夹,可用Ctrl+D组合键。

    没有评论 »

    dw的快捷键

    四月 23, 2007 | tools | RSS 2.0

       文档间的切换:Ctrl+Tab;
      隐藏面板:F4;
      代码检验器:F10;
      F12:使用主浏览器查看页面效果;
      Ctrl+F12:使用次浏览器查看页面效果;
      Ctrl+G:跳转行;
      Ctrl+F:查找替换;  
      Alt+F4:关闭当前面板;

      代码中的快捷键:
      home 段首;
      end 段尾;
      Ctrl+←或→ 按单词移动;
      Shift+←或→ 按字母选取文字;
      Shift+Ctrl+←或→ 按单词选取文字;
      Shift+Ctrl+↑或↓ 按行选取文字;
      Delete 删除鼠标后面的字母;
      Backspace 删除鼠标前面的字母;
      Ctrl+[ 选取父元素
      
      代码折叠
      折叠所选:Ctrl+Shift+C
      折叠外部所选:Ctrl+Alt+C
      扩展所选:Ctrl+Shift+E
      折叠完整标签:Ctrl+Shift+J
      折叠外部完整标签:Ctrl+Alt+J
      扩展全部:Ctrl+Alt+E
      缩进代码:Ctrl+Alt+[
      突出代码:Ctrl+Alt+]

      Windows 快捷键
      Win+D 桌面刷新;
      ALT+TAB 切换当前程序;
      ALT+ESC 切换当前程序;
      切换到上次使用的窗口或者按住 ALT然后重复按TAB,
      切换到另一个窗口 ALT+ TAB

      Internet Explorer快捷键 
      ALT+D 选择地址栏中的文字
      Ctrl+R 强行刷新页面;

    新建(New)一个网页 【Ctrl】+【N】 
     打开(Open)一个存在的网页 【Ctrl】+【O】 
     在框架中打开(Open)… 【Ctrl】+【Shift】+【O】 
     关闭(closedoWn)当前网页 【Ctrl】+【W】 
     保存(Save)当前网页 【Ctrl】+【S】 
     将当前网页换名存盘SaveAs… 【Ctrl】+【Shift】+【S】 
     检查联接的有效性 【Shift】+【F8】 
     撤消上一步操作 【Ctrl】+【Z】/【Alt】+【BackSpace】 
     重复上一步操作 【Ctrl】+【Y】/【Ctrl】+【Shift】+【Z】 
     剪切到剪贴板 【Ctrl】+【X】/【Shift】+【Del】 
     拷贝(Copy)到剪贴板 【Ctrl】+【C】/【Ctrl】+【Ins】 
     将剪贴板的内容粘贴到当前文件中 【Ctrl】+【V】/【Shift】+【Ins】 
     拷贝(Copy)HTML代码 【Ctrl】+【Shift】+【C】 
     粘贴HTML代码 【Ctrl】+【Shift】+【V】 
     全部(All)选择 【Ctrl】+【A】 
     选择上一级标签 【Ctrl】+【Shift】+【<】 
     选择下一级标签 【Ctrl】+【Shift】+【>】 
     查找(Find)和替换… 【Ctrl】+【F】/【Ctrl】+【H】 
     查找下一个 【F3】 
     缩进代码 【Ctrl】+【]】 
     取消缩进代码 【Ctrl】+【[】 
     平衡背带 【Ctrl】+【】 
     设置断点(Breakpoint) 【Ctrl】+【Alt】+【B】 
     调用外部编辑器(External Editor 【Ctrl】+【E】 
     参数设置(setUp)... 【Ctrl】+【U】 
     在编辑窗口和代码窗口间进行切换 【Ctrl】+【Tab】 
     刷新视窗显示 【F5】 
     显示/隐藏头文件 【Ctrl】+【Shift】+【W】 
     表格用标准显示方式 【Ctrl】+【Shift】+【F6】 
     表格显示为版面 【Ctrl】+【F6】 
     显示/隐藏不可见因素 【Ctrl】+【Shift】+【I】 
     显示/隐藏标尺(Rulers) 【Ctrl】+【Alt】+【R】 
     显示/隐藏网格 【Ctrl】+【Alt】+【G】 
     捕捉到网格(Grid) 【Ctrl】+【Alt】+【Shift】+【G】 
     播放(Play)外部插件 【Ctrl】+【Alt】+【P】 
     停止播放外部插件 【Ctrl】+【Alt】+【X】 
     播放所有的外部插件 【Ctrl】+【Alt】+【Shift】+【P】 
     停止所有外部插件 【Ctrl】+【Alt】+【Shift】+【X】 
     插入图像(Image) 【Ctrl】+【Alt】+【I】 
     插入Flash动画 【Ctrl】+【Alt】+【F】 
     插入Shockwave影片 【Ctrl】+【Alt】+【D】 
     插入表格(Table) 【Ctrl】+【Alt】+【T】 
     插入书签命名锚点(Anchor) 【Ctrl】+【Alt】+【A】 
     插入回车符号 【Shift】+【Enter】 
     插入非间断空格 【Ctrl】+【Shift】+【Space】 
     修改页面属性... 【Ctrl】+【J】 
     打开/关闭物体属性设置面板 【Ctrl】+【Shift】+【J】 
     快速代码编辑 【Ctrl】+【T】 
     新建链接(Link)... 【Ctrl】+【L】 
     删除链接(Link) 【Ctrl】+【Shift】+【L】 
     选择表格 【Ctrl】+【A】 
     合并(Merge)单元格 【Ctrl】+【Alt】+【M】 
     分离(Split)单元格... 【Ctrl】+【Alt】+【S】 
     插入一行 【Ctrl】+【M】 
     插入一列 【Ctrl】+【Shift】+【A】 
     删除一行 【Ctrl】+【Shift】+【M】 
     删除一列 【Ctrl】+【Shift】+【-】 
     增加单元格跨度 【Ctrl】+【Shift】+【]】 
     减少单元格跨度 【Ctrl】+【Shift】+【[】 
     左对齐选择物体 【Ctrl】+【Shift】+【1】 
     右对齐选择物体 【Ctrl】+【Shift】+【3】 
     顶对齐选择物体 【Ctrl】+【Shift】+【4】 
     底对齐选择物体 【Ctrl】+【Shift】+【6】 
     使宽度相同 【Ctrl】+【Shift】+【7】 
     使高度相同 【Ctrl】+【Shift】+【9】 
     将对象添加到库(Library)中 【Ctrl】+【Shift】+【B】 
     在模板中新建一个可编辑区域... 【Ctrl】+【Alt】+【V】 
     添加物体到时间线(Timeline)上 【Ctrl】+【Alt】+【Shift】+【T】 
     在时间线上添加关键帧 【F6】 
     删除时间线上的关键帧 【Shift】+【F6】 
     文本缩进 【Ctrl】+【Alt】+【]】 
     取消文本缩进 【Ctrl】+【Alt】+【[】 
     设置段落格式为无 【Ctrl】+【0】 
     设置段落格式为“Paragraph” 【Ctrl】+【Shift】+【P】 
     设置段落格式为“标题1” 【Ctrl】+【1】 
     设置段落格式为“标题2” 【Ctrl】+【2】 
     设置段落格式为“标题3” 【Ctrl】+【3】 
     设置段落格式为“标题4” 【Ctrl】+【4】 
     设置段落格式为“标题5” 【Ctrl】+【5】 
     设置段落格式为“标题6” 【Ctrl】+【6】 
     文字左(Left)对齐 【Ctrl】+【Alt】+【Shift】+【L】 
     文字居中(Center)对齐 【Ctrl】+【Alt】+【Shift】+【C】 
     文字右(Right)对齐 【Ctrl】+【Alt】+【Shift】+【R】 
     文本样式使用粗体(Bold) 【Ctrl】+【B】 
     文本样式使用斜体(Italic) 【Ctrl】+【I】 
     编辑(Edit)样式表… 【Ctrl】+【Shift】+【E】 
     拼写检查 【Shift】+【F7】 
     开始录制命令 【Ctrl】+【Shift】+【X】 
     播放(Play)录制好的命令 【Ctrl】+【P】 
     获取站 【Ctrl】+【Shift】+【D】 
     检查站点 【Ctrl】+【Alt】+【Shift】+【D】 
     放置(pUt)站点 【Ctrl】+【Shift】+【U】 
     登记站点 【Ctrl】+【Alt】+【Shift】+【U】 
     检查链接 【Ctrl】+【F8】 
     显示/隐藏面板和工具箱 【F4】 
     显示/隐藏上方工具栏(Toolbar) 【Ctrl】+【Shift】+【T】 
     显示/隐藏对象面板 【Ctrl】+【F2】 
     显示/隐藏属性面板 【Ctrl】+【F3】 
     显示/隐藏站点窗口 【F8】 
     打开站点映射图 【Alt】+【F8】 
     显示/隐藏资源面板 【F11】 
     显示/隐藏行为面板 【Shift】+【F3】 
     显示/隐藏代码窗口 【F10】 
     显示/隐藏CSS样式面板 【Shift】+【F11】 
     显示/隐藏框架面板 【Shift】+【F2】 
     显示/隐藏历史面板 【Shift】+【F10】 
     显示/隐藏HTML样式面板 【Ctrl】+【F11】 
     显示/隐藏图层面板 【F2】 
     显示/隐藏参考面板 【Ctrl】+【Shift】+【F1】 
     显示/隐藏时间线面板 【Shift】+【F9】 
     最小化Dreamweaver窗口 【Shift】+【F4】 
     恢复Dreamweaver窗口 【Alt】+【Shift】+【F4】 
     “站点”菜单命令 
       
     新建(New)窗口 【Ctrl】+【N】 
     新建(New)一个文件 【Ctrl】+【Shift】+【N】 
     新建(New)一个文件夹 【Ctrl】+【Alt】+【Shift】+【N】 
     打开(Open)网页… 【Ctrl】+【O】 
     打开(Open)选定的文件 【Ctrl】+【Alt】+【Shift】+【O】 
     关闭(closedoWn)站点窗口 【Ctrl】+【W】 
     重命名文件 【F2】 
     删除文件 【Delete】 
     检查链接 【Shift】+【F8】 
     退出Dreamweaver 【Ctrl】+【Q】 
     剪切到剪贴板

    没有评论 »

    编辑器材的使用

    四月 19, 2007 | tools | RSS 2.0

    <INPUT type=”hidden” value=” <?php echo stripslashes($news_content);?>>
    <IFRAME src=”./editor/editor.htm?id=content1&style=light” frameborder=”0″ scrolling=”no” width=”100%” height=”350″> </IFRAME>

    好像找到原因了 改成
    <?php echo htmlspecialchars($news_content);?>
    好像就可以

    没有评论 »