2009年5月20日

有关defunct进程(僵尸进程)的处理原则

僵尸进程:就是已经结束了的进程,但是没有从进程表中删除。太多了会导致进程表里面条目满了,进而导致系统崩溃,倒是不占用其他系统资源。

僵尸进程的查看:
ps -ef
出现:
root     13028 12956 0 10:51 pts/2    00:00:00 [ls] <defunct>
最后有defunct的标记,就表明是僵尸进程。

产生的原因:
每个Linux进程在进程表里都有一个进入点(entry),核心程序执行该进程时使用到的一切信息都存储在进入点。当用ps命令察看系统中的进程信息 时,看到的就是进程表中的相关数据。当以fork()系统调用建立一个新的进程后,核心进程就会在进程表中给这个新进程分配一个进入点,然后将相关信息存 储在该进入点所对应的进程表内。这些信息中有一项是其父进程的识别码。当这个进程走完了自己的生命周期后,它会执行exit()系统调用,此时原来进程表 中的数据会被该进程的退出码(exit code)、执行时所用的CPU时间等数据所取代,这些数据会一直保留到系统将它传递给它的父进程为止。由此可见,defunct进程的出现时间是在子进 程终止后,但是父进程尚未读取这些数据之前。

产生的例程:
#include "sys/types.h"
#include "sys/wait.h"

#include "stdio.h"
#include "unistd.h"

int main(int argc, char* argv[])
{
while(1)
{
    pid_t chi = fork();
    if(chi == 0)
    {
      execl("/bin/ls",NULL);
    }

    sleep(2);
}
}

对付这种的方法:
外部的方法:
执行pstree,看到:
     |-sshd-+-sshd---bash
     |      |-sshd---sftp-server
     |      `-sshd-+-bash---vi
     |             |-bash---myfork---2*[ls]
也就是主进程是myfork
将myfork干掉就可以了

编程的方法:
1、主进程等待子进程
#include "sys/types.h"
#include "sys/wait.h"

#include "stdio.h"
#include "unistd.h"

int main(int argc, char* argv[])
{
while(1)
{
    pid_t chi = fork();
    if(chi == 0)
    {
      execl("/bin/ls",NULL);
    }

    int status;
    wait(&status);
    sleep(2);
}
}

也就是加上了wait

2、在主进程里面补充对child 退出的signal的处理:
void sig_child(int signo)
{
pid_t pid;
int stat,i;
while((pid = waitpid(-1, &stat, WNOHANG)) > 0);
return;
}
signal(SIGCHLD,sig_child);

posted @ 2009-05-20 17:01 starspace 阅读(394) 评论(0) 编辑

2009年5月15日

在linux vi中激活鼠标中键,实现滚动换行

先写个综述吧, 需要条件如下, 第一 vim的编译的时候打开了gpm_mouse支持, 第二 系统安装了gpm服务

-----------------------------------------
用以下命令打开鼠标:
:set mouse=a
否则 Vim 不会在所有模式下识别鼠标 (见 'mouse')。

目前,鼠标只有在 Unix 的 xterm 窗口、Linux 终端 (带 GPM |gpm-mouse|)、MS-DOS
和 Windows 终端上才支持。鼠标键击可以用来定位光标,设置区域并粘贴。

'mouse' 选项的字符决定 Vim 在什么场合下会使用鼠标:
n 普通模式
v 可视模式
i 插入模式
c 命令行模式
h 在帮助文件里,以上所有的模式
a 以上所有的模式
r 跳过 |hit-enter| 提示
A 在可视模式下自动选择

'mouse' 的缺省值为空,即不使用鼠标。通常你会用:
:set mouse=a
来开始使用鼠标 (这等价于设置 'mouse' 为 "nvich")。如果你只想在若干模式下或者在
某两个任务上使用鼠标,你需要专注于那些模式对应的字母。例如:
:set mouse=nv
会使得鼠标在普通模式和可视模式下工作。
:set mouse=h
会使得鼠标只有在帮助文件里工作 (这样,可以用 "g<LeftMouse>" 来进行标签跳转)。

鼠标能否在可视模式或者选择模式下开始选择,决定于 "selectmode" 选项包不包括
"mouse"。
___________________________

GPM 鼠标只有在编译时打开 |+mouse_gpm| 特性才有效。GPM 鼠标驱动 (Linux 终端) 不
支持四击。

插入模式下,但选择开始时,Vim 暂时回到普通模式。在可视或者选择模式结束时,又回
到插入模式。这类似于在插入模式下使用 CTRL-O 的情形。选择模式在 'selectmode' 选

项包含 "mouse" 时被使用。

滚轮鼠标很棒吧?我们要在 Vi 程序下也要让他滚动。

不必去按 Ctrl-F/Ctrl-B 了!

如果你像我那样喜欢在 xterm 下使用 Vim 来编辑文件,那么对于在Vim 下能使用滚轮鼠标一定非常神往。本文的这个小技巧便能帮助你实现这个梦想。

你需要把下面的代码放入~/.Xdefaults 文件:

XTerm*VT100.Translations: #override "n"

: string("0x9b") string("[64~") "n"

: string("0x9b") string("[65~") "n"

: string("0x9b") string("[62~") "n"

: string("0x9b") string("[63~") "n"

: "n"

:

然后,修改 vimrc 文件,为以上的绑定建立映射:

map [62~

map! [62~

map [63~

map! [63~

map [64~

map! [64~

map [65~

map! [65~

好了,现在就可以利用滚轮来翻滚vim 屏幕了。

忘掉 Ctrl-F 和 Ctrl-B 吧。


posted @ 2009-05-15 23:33 starspace 阅读(528) 评论(0) 编辑

Graphical vi-vim Cheat Sheet and Tutorial

Learning vi or vim is not easy. But it doesn't have to be that difficult, either. It is, in any case, faster, more powerful, and more productive than editing with any other editor, so you would do very well in investing the time and effort to learn it.

Being a vi lover myself, I came up with the idea of providing a graphical cheat sheet for those learning vi or vim, and I also found out it was a very good way to structure a tutorial. Here are the results for your learning enjoyment (or your colleagues').

By the way, I recently published the definitive article explaining why vi/vim editing is so much better than regular editing. It should prove useful if you want to read it yourself, or if you want to point your skeptical friends to a description of why it makes sense, apart from being an entertaining read: Why, oh why, do those #?@! nutheads use vi?.

Graphical cheat sheet

This is a single page describing the full vi/vim input model, the function of all keys, and all major features. You can see it as a compressed vi/vim manual. Click on the image below to access the full-size bitmap image, or download the vector-based, scalable SVG version (zip-compressed - and be sure to view & print the SVG with the open source application Inkscape or the Adobe plug-in for Internet Explorer, Firefox breaks the layout for some reason, apart from rendering it with no anti-alias!).


Graphical cheat sheet based tutorial

Lesson 1
Lesson 1 (hi)
Lesson 2
Lesson 2 (hi)
Lesson 3
Lesson 3 (hi)
Lesson 4
Lesson 4 (hi)
Lesson 5
Lesson 5 (hi)
Lesson 6
Lesson 6 (hi)
Lesson 7
Lesson 7 (hi)
Zip with all GIFs
Zip with all SVGs

The tutorial above is structured in 7 lessons that cover the major commands in vi/vim. They are structured so that you will learn the simplest and most useful first, and the more advanced ones afterwards. Actually, using just the commands shown in lesson 1, you can already start editing in vi/vim in a similar way to how you would on a regular editor. Lesson 2 introduces the very powerful, and vi/vim-exclusive operators, and the rest of the lessons advance from there. Each thumbnail links to a high-resolution bitmap version. You can also download the full tutorial in a single zip file with all the bitmaps or a single zip file with all the SVGs (see the note above about incorrect rendering on Firefox).

Notes

vim is an incredible editor by Bram Moolenaar, based on the original vi by Bill Joy, adding a ton of improvements over it. Nowadays, you should choose vim over vi every time you can.

The cheat sheet and tutorial cover most important functions of vi's input model, leaving out the more advanced regular expressions/ex command line material. This should be a very good beginning to becoming a vi/vim wizard.

With the single exception of the external filter feature ("!"), all functions shown are supported by ViEmu, my commercial add-in that provides advanced vi-vim emulation in Visual Studio.

posted @ 2009-05-15 23:28 starspace 阅读(202) 评论(0) 编辑

用c.vim插件打造C/C++集成编辑器

利用c.vim插件,你可以实现
  • 添加文件头 
  • 添加注释 
  • 插入一些代码片段 
  • 语法检查 
  • 读函数文档 
  • 注释代码块

这一插件的作者是 Fritz Mehner, 目标就是打造程序员流畅的编辑环境。
 
这一插件还能完成:

  • Statement oriented editing of C / C++ programs
  • Speed up writing new code considerably.
  • Write code and comments with a professional appearance from the beginning.
  • Use code snippets


接下来我们对这一插件详细介绍.

3 安装插件

Step 1: 下载c.vim

$ cd /usr/src
$ wget http://www.vim.org/scripts/download_script.php?src_id=9679

Step 2: 安装

$ mkdir ~/.vim
$ cd ~/.vim
$ unzip /usr/src/cvim.zip

Step 3: 启用这一插件

$ vim ~/.vimrc
filetype plugin on

8 c.vim的使用

Feature 1: Add Automatic Header to *.c file

当你新建一个扩展名.c的文件时候,自动在文件头部增加头部注释

$ vim myprogram.c
/*
* =================================================
* Filename: myprogram.c
*
* Description:
*
* Version: 1.0
* Created: 01/19/09 20:23:25
* Revision: none
* Compiler: gcc
*
* Author: Dr. Fritz Mehner (mn),
mehner@fh-swf.de
* Company: FH Südwestfalen, Iserlohn
*
* =================================================
*/


其中如果你要改变 AUTHOR 和 COMPANY的值, 要修改模板文件 ~/.vim/c-support/templates/Templates

$ vim ~/.vim/c-support/templates/Templates
|AUTHOR| = geekstuff
|AUTHORREF| = gk
|EMAIL| = subscribe@geekstuff
|COMPANY| = thegeekstuff.com


现在编辑一个新文件,看看你的作者和公司名称改变了没有。

$ vim myprogram.c
/*
* =================================================
*
* Filename: myprogram.c
*
* Description:
*
* Version: 1.0
* Created: 01/19/09 20:26:43
* Revision: none
* Compiler: gcc
*
* Author: geekstuff (gk), subscribe@geekstuff
* Company: thegeekstuff.com
*
* =================================================
*/

 

Feature 2: 用"if 添加c函数

键入"if 加函数名称 (as shown in Fig1 below) 就会在文件中自动完成函数的定义,就像图二那样。
 

Vim C/C++ IDE - Adding C Function - 1

 

Fig1:Insert C Function Automatically
 
Vim C/C++ IDE - Adding C Function - 2

Fig 2:Insert C Function Automatically

Feature 3: 用"im 添加main函数

添加的效果如下: 

 

Fig 3: Insert C main function automatically

Feature 4: 用 "cfu 添加函数注释
 

Vim C/C++ IDE - Insert C Function Header - 1

 

Fig 4: Insert C Function Header Automatically
 
Vim C/C++ IDE - Insert C Function Header - 1

Fig 5: Insert C Function Header Automatically

Feature 5:  用"cfr添加注释框架

 

Vim C/C++ IDE - Insert Frame Comment

 

Fig 6: Insert a Frame Comment Automatically

Feature 6: 用"p<包含头文件

Type "p< in the normal mode, which will include the text “#include <>”, and places the cursor in the < symbol in Insert mode where you can type the header file name.

Feature 7: 保存编译文件.

保存并编译文件 "rc.

运行 "rr.

Feature 8: 用"nr 插入预定义的代码片段

The plugin comes with few pre-defined code snippets that you can insert into your code. Following are the default code snippets that comes with the plugin.

$ ls ~/.vim/c-support/codesnippets
Makefile calloc_double_matrix.c main.c print_double_array.c.noindent
Makefile.multi-target.template calloc_int_matrix.c main.cc print_int_array.c.noindent

For example, if you want to create a function that will Allocate a dynamic int-matrix of size rows*columns; return a pointer, you can re-use it from the existing code snippets. Following is the content of the calloc_int_matrix.c pre-defined code snippets.

/*
* === FUNCTION ======================================================================
* Name: calloc_int_matrix
* Description: Allocate a dynamic int-matrix of size rows*columns; return a pointer.
* =====================================================================================
*/
int**
calloc_int_matrix ( int rows, int columns )
{
int i;
int **m;
m = calloc ( rows, sizeof(int*) ); /* allocate pointer array */
assert( m != NULL ); /* abort if allocation failed */
*m = calloc ( rows*columns, sizeof(int) ); /* allocate data array */
assert(*m != NULL ); /* abort if allocation failed */
for ( i=1; i
m[i] = m[i-1] + columns;
return m;
} /* ———- end of function calloc_int_matrix ———- */


如果要插入这段代码,可以键入"nr 文件名称,代码就会自动插入了。

posted @ 2009-05-15 23:28 starspace 阅读(1251) 评论(0) 编辑

放弃IDE,用VIM进行c/c++程序开发

老廖曾经在PHPER杂志上发表过一篇文章叫做用VIM做PHP开发环境,在里面详细介绍了用VIM做php开发需要做的准备,这篇文章就结合一些资料和我自己的一些经验来介绍下用VIM做C/C++开发需要做的事情,相对来说要比做php开发方便些。

前提条件是当然是你已经下载了VIM,如果没有的话请先到官方网站下载最新版本,地址是:http://www.vim.org/download.php

帮助文档下载地址::http://vimcdoc.sourceforge.net/

首先从视觉方面:

第一个要做的是缩进,修改你的VIM配置文件_vimrc,在最后加入set cindent,这样就设置了c风格的缩进,在这里缩进的大小是shiftwidth的值。

第二个要做的是语法高亮,这个是必须的,在中_vimrc加入syntax enable

第三个要做的字体的设置,设置一个舒服的字体可以让你编程的时候舒服好多,用editplus的时候我就用的Consolas,在vim中我还是用的这种字体,在_vimrc中加入

if has(”gui_running”)
set guifont=Consolas:h9
endif

表示运行界面vim的时候就用这种字体。

第四,设置配色方案,可以到点击这儿下载,然后放到$VIM"vimfiles"colors这个目录下,然后在中加入如下配置

if has(”gui_running”)
set guifont=Consolas:h9
” set color schema
colorscheme
colorscheme_name
endif

colorscheme_name为你需要设置的配色方案的名称。

接下来是在运行程序中用到的:

第一,使用ctag

VIM中已经带了Ctags这个程序。尽管ctags也可以支持其它编辑器,但是它正式支持的只有VIM。Ctags可以帮助程序员很容易地浏览源代码。用下面的命令可以在源代码的根目录下创建“tags”文件:

[/home/brimmer/src]$ ctags -R

“-R”表示递归创建,也就包括源代码根目录下的所有子目录下的源程序。“tags”文件中包括这些对象的列表:

l        用#define定义的宏

l        枚举型变量的值

l        函数的定义、原型和声明

l        名字空间(namespace)

l        类型定义(typedefs)

l        变量(包括定义和声明)

l        类(class)、结构(struct)、枚举类型(enum)和联合(union)

l        类、结构和联合中成员变量或函数

VIM用这个“tags”文件来定位上面这些做了标记的对象,下面介绍一下定位这些对象的方法:

1)        用命令行。在运行vim的时候加上“-t”参数,例如:

[/home/brimmer/src]$ vim  -t  foo_bar

这个命令将打开定义“foo_bar”(变量或函数或其它)的文件,并把光标定位到这一行。

2)        在vim编辑器内用“:ta”命令,例如:

:ta foo_bar

3)        最方便的方法是把光标移到变量名或函数名上,然后按下“Ctrl-]”。用“Ctrl-o”退回原来的地方。

注意:运行vim的时候,必须在“tags”文件所在的目录下运行。否则,运行vim的时候还要用“:set tags=”命令设定“tags”文件的路径,这样vim才能找到“tags”文件。

你还可以选择使用taglist这个插件,这个插件可以在右侧显示函数,变量等的列表

第二,改正程序中的错误

在VIM编辑器的环境下用“:make”(make工具的使用已经在我昨天的文章中 提到的云风的几篇文章中详细介绍到)就可以编译程序,当然其前提是在当前目录下有Makefile文件。运行完“:make”之后,如果程序中有错误,就 会显示出来。这时候,光标会自动指向第一个出现错误的地方,而且你还可以看到错误的提示。然后,你就可以改正错误,而不用手工找到出错的那一行。记住下面 几个有用的命令:

l        “:cl”列出错误

l        “:cn”让光标指向下一个错误

l        “:cp”让光标指向上一个错误

l        “:cnew”从头开始

你甚至可以让VIM识别出其它编译器而不是gcc的错误提示。这对一些开发嵌入式系统的程序员这很有用,因为他们很可能用的不是gcc而是其它编译器。通过设置“errorformat”的值,可以让VIM识别出编译器的出错提示。因为不同的编译器的出错提示是不同的,所以如果用的不是gcc就要重新设置。

errorformat”的值是一个字符串,它的格式和C语言的scanf的字符串格式相识。

gcc的“errorformat”的值为:%f:%l:"%m。其中“%f”表示文件名,“%l”表示行号,“%m”表示出错信息。

用“:h errorformat”查看详细的帮助信息。

“:h quickfix”、“:h make”、“:h makeprg”、“:h errorfile”查看其它的信息。

第三,使用快捷键

下面的这些快捷键对程序员很有帮助:
在函数中移动光标

[[  转到上一个位于第一列的“{”

]]  转到下一个位于第一列的“{”

{   转到上一个空行

}   转到下一个空行

gd  转到当前光标所指的局部变量的定义

*   转到当前光标所指的单词下一次出现的地方

#   转到当前光标所指的单词上一次出现的地方
括号的匹配

%   用来进行小括号、中括号和大括号的匹配。这要看当前光标指向的是什么符号了。

结语:

vim一直是一些牛人推荐的工具并一直存在着是有着道理的,她大大提高了我们的工作效率,如果你打算长期变成的话,花一个星期的时间来熟悉vim的使用时很有必要的!

posted @ 2009-05-15 23:27 starspace 阅读(1539) 评论(0) 编辑

当vim遇上C++

俗话说,“工欲善其事,必先利其器“,好的开发工具可以帮我们大大地提高开发效率。用vim在linux下写C++有一段时间了,这里想把自己正在用的一些vim插件和大家分享一下

 

1. Alternate (http://www.vim.org/scripts/script.php?script_id=31)
在对应的头文件和代码文件中快速地切换

安装:
(1) 下载a.vim到~/.vim/plugin目录,alternate.txt到~/.vim/doc目录
(2) 进入vim,执行:helptags ~/.vim/doc/ (注:Ubuntu8.10自带的vim不支持helptags命令,需要重新sudo apt-get install vim)
常用命令:
(1):A 在.h和.cpp文件间切换
(2):AS 纵向切分.h和.cpp文件
(3):AV 横向切分.h和.cpp文件
(4):AT 在新Tab中打开对应的.h或.cpp文件

2. OmniCppComplete (http://www.vim.org/scripts/script.php?script_id=1520)
自动补全

安装:
(1) 下载最新的omnicppcomplete zip文件到~/.vim目录
(2) 进入vim,执行:helptags ~/.vim/doc/
(3) 然后执行:h omnicppcomplete,参考installation里的步骤继续安装
    (a) 在~/.vimrc文件中加入:set nocp和filetype plugin on
    (b) 在~/.vimrc文件中加入一行:map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>,这样只要在vim中按下Ctrl+F12,就能生成当前目录以及子目录下所有C/C++程序的ctags数据库(在当前目录下生 成一个名为tags的文件)
    (c) omnicppcomplete会自动查找当前目录下的tags文件,如果想查找其他目录下的tags文件(比如/opt/ACE_wrappers/tags),可以在~/.vimrc文件中加入
    set tags+=/opt/ACE_wrappers/tags

 

常用命令:
(1) 输入.或->或<C-X><C-O>时会自动弹出可能的补全选项(可以用上下箭头选择)
(2) 输入<C-N>自动补全

3. ctags
前面omnicppcomplete用到了ctags,其实ctags还有很多功能。最方便的功能是把光标定位在某个变量 或函数,按下Ctrl+],这样vim就能直接跳到这个变量或函数定义的源文件中,Ctrl+T是Ctrl+]的反操作,可以退回原来的地方,我们可以连 续按N次Ctrl+]查找变量或函数,然后再按N次Ctrl+T返回开始的地方

4. Supretab (http://www.vim.org/scripts/script.php?script_id=1643)
按下tab键完成insert completion (:help ins-completion),与omnicppcomplete配合使用,效果更佳

安装:下载supertab.vim到~/.vim/plugin目录下

5. csupport (http://www.vim.org/scripts/script.php?script_id=213)
这个插件用得还不是很熟,总体感觉很好很强大,很多功能有待好好挖掘

安装:
(1) 下载cvim.zip到~/.vim目录,unzip
(2) 阅读README.csupport,需要进行的修改主要包括
    (a) 修改c-support/templates/Templates
    (b) 修改c-support/templates目录下的c.*.template文件中的代码风格
    (c) 修改~/.vimrc文件,加入filetype plugin on
    (d) a)进入vim,执行:helptags ~/.vim/doc/
(3) :h csupport-vim-usage获得帮助

posted @ 2009-05-15 23:27 starspace 阅读(252) 评论(0) 编辑

学习Vim的一点心得

现在的工作是在unix平台,平时是用UE的ftp功能来写代码的,有时候文件大了,传输就很慢,而且经常不是很稳定。
下定决心要学学Vim(现在应该没有人用原始的vi了吧),在经过二周的使用后,发现Vim实在是非常不错的一个editor,现在我在Windows上也装了一个Vim,使用起来颇为顺手,基本上已经替代了UE。

下面介绍一些我在使用Vim的过程中得到的一些心得:
1. 在使用Vim之前一定要进行一些设置,否则你使用起来肯定会很不爽,下面是我的配置

 1 " ==============================================
 2 "  General settings
 3 " ==============================================
 4
 5 set nocp
 6 set ru
 7 "  使用cindent
 8 set cin
 9 set cino = :0g0t0(sus
10
11 set sm
12 set ai
13 "  缩近
14 set sw=4
15 set ts=4
16 "  不展开tab为空格,反之set et
17 set noet
18
19 set lbr
20 set hls
21 set backspace = indent , eol , start
22 set whichwrap = b , s , < , > , [ , ]
23 set fo+ = mB
24 set selectmode =
25 set mousemodel = popup
26 set keymodel =
27 set selection = inclusive
28 set matchpairs+ = <:>
29
30 " ==============================================
31 "  Cursor movement
32 " ==============================================
33 nnoremap <Down> gj
34 nnoremap <Up> gk
35 vnoremap <Down> gj
36 vnoremap <Up> gk
37 inoremap <Down> <C-o>gj
38 inoremap <Up> <C-o>gk
39
40 nnoremap <End> g$
41 nnoremap <Home> g0
42 vnoremap <End> g$
43 vnoremap <Home> g0
44 inoremap <End> <C-o>g$
45 inoremap <Home> <C-o>g0
46
47 nmap <C-F4> :confirm bd<CR>
48 vmap <C-F4> <ESC>:confirm bd<Enter>
49 omap <C-F4> <ESC>:confirm bd<Enter>
50 map! <C-F4> <ESC>:confirm bd<Enter>
51
52 "  打开语法高亮
53 syntax on
54 "  使用语法进行折叠
55 set foldmethod=syntax
56
57 if (has( " gui_running " ))
58     set nowrap
59     set guioptions+=b
60     colo inkpot
61 else
62     set wrap
63     colo ron
64 endif
65
66 "  设置swap文件的目录
67 set dir = D:"vim"tmp
68 " 设置备份文件的目录
69 set backupdir=D:"vim"bak
70
71 "  设置leader的快捷键,原来的“"”太远了,而且位置还不固定
72 let mapleader = " , "

这里是一些基本设置
如果有什么不太清楚的,可以在Vim里normal模式下
:h 关键字
查看帮助

2. Vim教程
推荐先看看Vim自带的Tutor(这可是位好老师)
用vimtutor启动Vim
或者在Vim里面用:h tutor来启动
中文教程我推荐李果正的《大家来学Vim》
这里还有Vim的键位示意图,可以打出来随时查看哦

 
3. Vim的插件
有几个插件强烈推荐
(1) A:在同名的cpp和h文件之间切换 http://www.vim.org/scripts/script.php?script_id=31
(2) NERD_comments:超强的注释插件,支持很多语言的注释风格,按照上面的设置,只需要",cc"就可以添加注释了 http://www.vim.org/scripts/script.php?script_id=1218
(3) csupport:写C/C++代码必备 http://www.vim.org/scripts/script.php?script_id=213
(4) LargeFile:再也不用担心打开大文件会慢了 http://www.vim.org/scripts/script.php?script_id=1506
(5) TipOfTheDay:多读读vim的tips会有很多收获的,记得要经常更新tips文件啊 http://www.vim.org/scripts/script.php?script_id=88
(6) cppomnicomplete:提供C++中类/对象成员的补全(需要Vim7) http://www.vim.org/scripts/script.php?script_id=1520
(7) ColorSamplerPack:提供上百种颜色主题,必有一款适合你,不过大多数都是在GUI下才有相应的效果 http://www.vim.org/scripts/script.php?script_id=625
(8) vimcdoc:汉化的vim帮助 http://vimcdoc.sourceforge.net/

3. 在telnet中使用vim的颜色
如果是在linux中使用telnet,SecureCRT会自动使用合适的颜色来显示vim不同的颜色,但是如果在其他unix下就会无法显示正确的颜色,所有的东西都是同一种颜色。

在.vimrc中加入(^[的输入方式是Ctrl-v然后输入Esc):
if !has("gui_running")
set t_Co=8
set t_Sf=^[[3%p1%dm
set t_Sb=^[[4%p1%dm
endif
并在SecureCRT的模拟终端类型选择ANSI,并钩上ANSI Color,就可以显示不同的颜色了

4. vim的自动补全功能
一般使用Ctrl+n就可以自动补全了,从Vim7后,C/C++的函数、变量或者是类的成员,使用Ctrl+x,Ctrl+o也可以自动补全。在安装了cppomnicomplete后,对象的成员也可以用Ctrl+x,Ctrl+o来补全

5. 代码折叠
许多editor都支持代码折叠,Vim也不例外
常用的快捷键
zc 折叠代码
zo 打开折叠的代码
还有其他的快捷键可以查看帮助
:h fold

6. 自动格式化代码
在Visual模式下,选中代码按=就可以了
Normal模式下,按=会格式化光标所在行

7. 脚本支持
Vim不仅有内建的脚本功能,还支持Perl,Python,Tcl,Ruby和MzScheme这些流行的脚本语言编写Vim的扩展

Vim的功能是不是很强大?
经过1年多的测试Vim 7.0也release了,还不快下载来试试
http://www.vim.org

Happy Vimming!

对于已经习惯了使用Vim但是要在Windows下编程的用户
我还推荐
ViEmu,可以在VisualStudio下模拟Vi的编辑操作
不过只有30天的试用期

posted @ 2009-05-15 23:26 starspace 阅读(345) 评论(0) 编辑

构建vim的可视化C++编辑平台

     Vim是一个强大的文本编辑器。我们在win32平台下用VC写代码的时候,常常比较习惯VC给予的一些格式控制和代码补全功能,而这些功能都是可以在 vim中实现的,并且,已经有前人为我们写好了插件脚本,我们只需要非常简单的设置,就可以迅速的构建出类似VC的C++编译环境。
        Vim的配置文件通常在~/.vimrc中。我们首先可以加入这样两句:
syntax on            //语法高亮打开,这样我们就可以看倒C/C++的关键字成为了彩色;
:set cin!               //C缩进打开,这样vim会自动判断缩进的设置;
        完成这样的设置后,当我们创建或者打开vim所能识别的C/C++源文件的时候,我们就可以看到关键字的颜色以及自动的缩进了。
        需要指出的一点是,按照Unix源程序的习惯,我们最好以ASCII编码来写程序,而Debian的内部编码默认是UTF-8。当然,如果我们vim创建 的文件没有汉字等其他字符的时候,产生的文件自动是ASCII编码的,但是,某些插件,比如vim的c-support插件会自动添加文件的创建日期,这 样,因为我们系统默认语言一般是zh_CN,所以就会产生中文的日期显示。所以,一个解决方法是在运行创建cpp文件的vim的时候,指定使用的语言,或 者,干脆做一个alias来简单使用:
alias cvim='LC_ALL=C vim'
这样,就可以确保创建的cpp文件不带非ASCII字符。

        接下来,我们简单了解一下ctags。简单说,ctags是为许多计算机语言的源代码文件做索引,以提供给编辑器(比如我们的vim)使用的。我们先看看ctags的帮助:
ctags --help
以下信息是我们将用到的:
-R   Equivalent to --recurse.
--recurse=[yes|no]    Recurse into directories supplied on command line [no].
--languages=[+|-]list
       Restrict files scanned for tags to those mapped to langauges
       specified in the comma-separated 'list'. The list can contain any
       built-in or user-defined language [all].
--fields=[+|-]flags
      Include selected extension fields (flags: "afmikKlnsStz") [fks].
--extra=[+|-]flags
      Include extra tag entries for selected information (flags: "fq").
我们用这样的命令在源文件所在的目录运行:(用样,我们可以做一个alias,我们最后来讨论这个问题)
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q
其中参数的含义是:原文出处
--c++-kinds=+p  : 为C++文件增加函数原型的标签
--fields=+iaS   : 在标签文件中加入继承信息(i)、类成员的访问控制信息(a)、以及函数的指纹(S)
--extra=+q      : 为标签增加类修饰符。注意,如果没有此选项,将不能对类成员补全

        好了,现在准备知识讲完了。我们先实现C++对象用.或者->调用方法的时候自动产生选择的下拉菜单。我们需要的插件是OmniCppComplete,在vim官方这里下载:
http://www.vim.org/scripts/script.php?script_id=1520
下载到的是一个压缩包,解压到~/.vim/下相应的目录就可以了。另外,我们需要在~/.vimrc中打开装载插件:
:filetype plugin on
(或许还需要打开vim对源代码的识别,不过我是没有用到,Debian 4.0,如果需要的话,再加上:filetype indent on)
另外,我们关闭vim默认的预览窗口:
:set completeopt=longest,menu
        这样,当我们创建了对象,用.或者->的时候,就会自动调出类方法的选择窗口了。

        另外一个常见的补全是对函数的补全,也有现成的插件可以用code_complete:
http://www.vim.org/scripts/script.php?script_id=1764
这个安装就更简单了,直接把code_complete.vim拷贝到~/.vim/plugin/下面就可以了。
插件的使用方法是,当写完一个函数,并打上左括号(之后,按tab键就可以看倒函数参数列表了,包括重载的函数。

        最后,我们不希望记那么多参数,希望使用起来简单一些,我们只需要在bash运行的时候申明我们的两个alias就可以了。在~/.bashrc中添加:
alias vctags='ctags -R --c++-kinds=+p --fields=+iaS --extra=+q'
alias cvim='LC_ALL=C vim'
关闭终端后重启动,可以用type查看我们的新命令已经生效了:
lf426@fleet:~$ type vctags
vctags is aliased to `ctags -R --c++-kinds=+p --fields=+iaS --extra=+q'

posted @ 2009-05-15 23:26 starspace 阅读(192) 评论(0) 编辑

PHP的三种典型开发环境[转]

最近在完成一个过渡项目,用到了PHP,以前看php怎么看怎么别扭,维护性差,代码乱是我的印象,这次决定花点时间看看到底有没有了解的必要,呵呵,

采用了三种方案来尝试:前提是Apache服务器,推荐下载xamppLite ,目前最新版本1.7.0

下载地址: http://www.apachefriends.org/en/xampp-windows.html

第一种:VS.PHP+VSS,整个环境非常适合.net平台。

一个很不错的PHP插件,可以集成在vs.net环境下,有三个版本:

 

下载地址:http://www.jcxsoftware.com/vs.php

 


 

 

第二种方案:NetBeans6.5以上+SVN/CVS

NetBeans6.5以上集成了PHP开发环境。易用,强大!下载地址:http://www.netbeans.org/downloads/index.html


 


 


 

 

 

第三种方案: Eclipse平台下PDT,目前最新版本是PDT 2.0 All In Ones

 

下载地址:http://www.eclipse.org/pdt/

下载后解压即用!

 

 

 

 

 

 

 小结:本文简要介绍了开发PHP的三种开发环境!第一种方案,易用性强,但要99$,呵呵。第二种方案易用性也不错!完全免费,问题是听说SUN要卖给IBM了!感觉有点别扭!第三种方案真的不错!开源无敌!

 

posted @ 2009-05-15 23:25 starspace 阅读(111) 评论(0) 编辑

用VIM做PHP开发环境

作者:廖宇雷

虽然vim本质上只是一个编辑器。但只要配合一些适当的插件,vim也能变成一个全功能的IDE。笔者使用vim已经有挺长一段时间了,经过反复的试验,配置了一个高效的PHP开发环境,实为居家旅行、谋财害命、杀人越货必备之良品。

安装vim

鉴于大多数读者都是使用Windows环境,所以本文就以Windows作为运行环境。不过由于vim出色的跨平台特性,配置文件只需简单修改就可以在Linux版本的vim中使用。

目前vim的最新版本是7.2,如果没有特别原因建议安装最新的版本。

下载地址:http://www.vim.org/download.php#pc
下载文件:ftp://ftp.vim.org/pub/vim/pc/gvim72.exe

安装时不要装到带有空格、中文的目录中,其他保持默认即可。笔者的安装目录是c:"apps"office"vim,后文也以此为准。为了叙述方便,笔者用$VIM来表示vim的安装目录。例如您的vim安装在d:"vim"中,那$VIM就代表d:"vim"。

开始配置vim

我们对vim的配置分为几个步骤。

修改_vimrc后自动生效

打开$VIM目录,可以看到其中有一个_vimrc文件,用vim打开此文件,删除所有内容后,在最后插入两行:

" autoload _vimrc

autocmd! bufwritepost _vimrc source %

上述命令让我们通过vim编辑_vimrc文件并保存时,可以自动载入_vimrc文件,使得我们对vim的定制可以立即生效(无需重启vim)。

使vim中文化

在_vimrc顶部增加下列文本:

" disable VI's compatible mode..

set nocompatible

" set encoding=utf-8

set fileencodings=ucs-bom,utf-8,gbk,default,latin1

" use chinese help

set helplang=cn

上述代码的作用是禁用vi兼容模式(原始的vi功能太少了,没必要考虑兼容)、按照utf-8、gbk的顺序来检测文件编码,并设置帮助为中文。不过设置set helplang=cn并不能马上看到中文帮助,我们还得下载中文帮助文件。

下载地址:http://vimcdoc.sourceforge.net/
下载文件:vimcdoc-1.6.0.tar.gz

得到中文帮助文件压缩包后,将压缩包中doc子目录的所有文件复制到$VIM"vimfiles"doc目录中。此时再输入:help命令就可以看到中文帮助了。

中文帮助还是7.1版的,不过不影响我们使用。

设置字体

选择vim菜单的“编辑”->“选择字体”,就可以为vim指定喜欢的显示字体了。笔者使用的是Consolas字体,大小设置为9pt。这个设置显示代码非常漂亮,不过中文就有点变形了。

设置好后,输入命令:set guifont可以查看到当前的字体设置,将该设置写入_vimrc文件。

"set gui options

if has("gui_running")

set guifont=Consolas:h9

endif

上述代码中的if … endif是一个条件判断结构。指示只有当我们使用图形界面版的vim时才设置字体。

为编辑PHP代码进行基本设置

现在用vim打开.php文件看上去是很难看的,别说代码高亮,连行号都没有显示。所以还要给_vimrc添加以下内容:

" Enable syntax highlight

syntax enable

" Show line number

set nu

" show matching bracets

set showmatch

" Basic editing options

set expandtab

set shiftwidth=2

au FileType html,python,vim,javascript setl shiftwidth=2

au FileType html,python,vim,javascript setl tabstop=2

au FileType java,php setl shiftwidth=4

au FileType java,php setl tabstop=4

set smarttab

set lbr

set tw=0

"Auto indent

set ai

" Smart indet

set si

" C-style indeting

set cindent

" Wrap lines

set wrap

上述设置启用了格式化高亮、行号显示,以及括号匹配、自动缩进等编辑功能,对于大多数情况都可以获得理想的编辑体验。不过此时对.php文件的支持还不完善,需要下载专门的php插件。

下载地址:http://www.vim.org/scripts/script.php?script_id=1571
下载文件:php.tar.gz

将其中的php.vim复制到$VIM"vimfiles"syntax目录中即可。

设置喜欢的配色方案

默认的配色方案相信没几个人会喜欢,可以通过下面的网址查看配色方案并下载(有几百个哦)。

下载网址:http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html

这个网址列出了300多个配色方案以及实际的显示效果,点击方案名称即可下载到一个.vim文件。将该文件放入$VIM"vimfiles"colors目录,然后在_vimrc中添加:

" set color schema

colorscheme oceandeep

这两行代码需要加到if has("gui_running") … endif代码块中,例如:

if has("gui_running")

set guifont=Consolas:h9

" set color schema

colorscheme oceandeep

endif

设置后显示效果就漂亮多了:-)­

更多有用的编辑设置

虽然不是专门针对编辑.php文件的设置,但这些选项可以让vim更好用,所以建议加上:

" Sets how many lines of history VIM har to remember

set history=400

" Set to auto read when a file is changed from the outside

set autoread

" Have the mouse enabled all the time:

set mouse=a

" Do not redraw, when running macros.. lazyredraw

set lz

" set 7 lines to the curors - when moving vertical..

set so=7

" The commandbar is 2 high

set cmdheight=2

" Change buffer - without saving

set hid

" Ignore case when searching

" set ignorecase

set incsearch

" Set magic on

set magic

" No sound on errors.

set noerrorbells

set novisualbell

set t_vb=

" How many tenths of a second to blink

set mat=4

" Highlight search things

set hlsearch

" Turn backup off

set nobackup

set nowb

set noswapfile

" smart backspace

set backspace=start,indent,eol

" switch buffers with Tab

map <C-Tab> :bn<CR>

map <S-Tab> :bp<CR>

经过一番改造,我们的vim已经可以很顺手的编辑.php文件了。不过要打造php开发环境还有很多工作要做呢。

打造PHP IDE

IDE左侧是目录导航,中间是编辑区域,而右侧则是方法列表,用于在已经打开的文件中快速跳转。在编辑区域按下CTRL+X键,还会显示已打开文件的列表。

其他诸如自动补全、代码模板等功能,都应有尽有。看过了漂亮的截图,我们就来一步步打造PHP IDE吧。

用NERDTree实现目录导航

在进行PHP应用开发时,同时编辑多个文件是很正常的事情。所以必须有一个方便的目录导航工具,以便在目录结构间快速切换,找到需要编辑的文件。

vim中提供该类功能的插件很多,比较知名的有project、winmanager等。但笔者个人认为最好用的还是The NERD Tree这个插件。NERDTree不但可以显示完整的目录树结构,还可以将任何一个目录设置为根目录。并且提供了目录导航的书签功能,可谓非常方便。

下载地址:http://www.vim.org/scripts/script.php?script_id=1658
下载文件:NERD_tree.zip

解压缩时,要把压缩包中的目录结构完整的解压缩到$VIM"vimfiles目录中。完成后,应该分别找到$VIM"vimfiles"doc"NERD_tree.txt文件和$VIM"vimfiles"plugin"NERD_tree.vim文件。然后在vim中输入命令:helptags $VIM"vimfiles"doc,将NERDTree的帮助文档添加到vim中。

最后在_vimrc添加如下内容:

" NERDTree

map <F10> :NERDTreeToggle<CR>

重启vim后,按下F10键,就可以在左侧看到一个目录树了。在目录树窗口中按下?键可以查看详细的帮助信息。

最常用的操作键有:

按键

作用

C(大写C键)

将光标所在目录设置为根目录

u(小写u键)

转到上一级目录

o(小写o键,不是“零”)

展开(或折叠)光标所在目录的子目录。如果光标所在位置是一个文件,则在编辑窗口中打开该文件

此外在目录树窗口中输入目录:Bookmark收藏名还可以将光标所在目录添加到收藏夹中。下次使用:BookmarkToRoot收藏名可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考NERDTree的帮助文档。

用taglist实现代码导航

解决了目录和文件导航问题,我们还要为代码之间的跳转提供辅助手段,taglist就是这样一个插件。taglist可以列出已打开文件中定义的类、函数、常量,甚至变量。

下载地址:http://www.vim.org/scripts/script.php?script_id=273
下载文件:taglist_45.zip

压缩包需要完整解压缩到$VIM"vimfiles目录,并且用:helptags $VIM"vimfiles"doc命令索引taglist插件的帮助文档。taglist插件需要依赖ctags程序才能工作。目前常用的ctags版本是Exuberant Ctags。

下载地址:http://ctags.sourceforge.net/
下载文件:ec57w32.zip

只需要把压缩包中的ctags.exe复制到$VIM"vim72目录中即可。ctags.exe应该和gvim.exe在一个目录。

最后在_vimrc添加下列内容,设置好taglist插件:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" => Plugin configuration

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" taglist

let Tlist_Auto_Highlight_Tag = 1

let Tlist_Auto_Open = 1

let Tlist_Auto_Update = 1

let Tlist_Close_On_Select = 0

let Tlist_Compact_Format = 0

let Tlist_Display_Prototype = 0

let Tlist_Display_Tag_Scope = 1

let Tlist_Enable_Fold_Column = 0

let Tlist_Exit_OnlyWindow = 0

let Tlist_File_Fold_Auto_Close = 0

let Tlist_GainFocus_On_ToggleOpen = 1

let Tlist_Hightlight_Tag_On_BufEnter = 1

let Tlist_Inc_Winwidth = 0

let Tlist_Max_Submenu_Items = 1

let Tlist_Max_Tag_Length = 30

let Tlist_Process_File_Always = 0

let Tlist_Show_Menu = 0

let Tlist_Show_One_File = 0

let Tlist_Sort_Type = "order"

let Tlist_Use_Horiz_Window = 0

let Tlist_Use_Right_Window = 1

let Tlist_WinWidth = 40

let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'

这里的设置是笔者个人习惯的设置,大家在熟悉taglist的具体设置之前可以先尝试一下。

 

posted @ 2009-05-15 23:15 starspace 阅读(619) 评论(1) 编辑

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

公告

昵称:starspace
园龄:3年4个月
粉丝:6
关注:0

搜索

 
 

常用链接

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

推荐排行榜