Things change, roll with the punches.Oh, yeah. Go for it man, jump off the high dive, stare down the barrel of the gun, pee into the wind!

发布新日志

  • 小议red hat 系统日志

    2007-01-05 01:00:32Top 3 Digest 3

     本人使用OS:Centos 4.4 final(Centos是一款redhat advanced server兼容的免费发行版本)
    ------------------------------------------
    日志的作用:日志文件用来记录系统的状态,帮助管理员确定、检修故障
    常用日志存放目录:/var/log/,默认日志都放在这个位置
    相关命令:last命令,显示最近登陆系统的用户
    相关守护进程:SYSLOGD(system log daemon,你可以通过ps -aux | grep syslog查看到,该守护进程

    处于运行状态),配置文件位于/etc/syslog.conf
    SYSLOGD相关概念:
    Levels(等级) =从调试到紧急(0~7)
     0 = log_debug调试 调试程序时使用
     1 = log_info信息 
     2 = log_notice注意 没有错误,但是可能有设置不当,需要处理
     3 = log_warning警告
     4 = log_error错误 
     5 = log_critical严重 
     6 = log_alert警报 应该马上被改正的问题
     7 = log_emergency紧急

     Facilities(设备) = 设备/服务类型  内核/应用程序类型
     Log_kernel 内核产生的信息
     Log_user 用户产生的信息
     Log_mail 电子邮件信息
     Log_daemon 守护进程信息
     Log_auth 认证系统信息 login,logout,su等
     Log_lpr 系统打印机spooling信息
     Log_local0 - Log_local7 本地使用保留

    例1 facility = Cisco Firewall
     levels = 0~7
    例2  facility = sendmail
     levels = 0~7

    /etc/syslog.conf 结构--分为两列
                 facility.level                                                           destination(log目的地)
    例1     kern.*                                                                       /dev/console
    例2     *.info;mail.none;cron.none;authpriv.none    /var/log/messages
    例3     mail.*                                                                       /var/log/maillog
    以上例1,例3中的*表示所有level都记录,例2表示除非了mail,cron,authpriv以外的所有log等级大于等于info都记录下来

    SyslogD生成的log文件包含4个纵列
    日期 时间 主机名 应用程序信息/设备信息
    例如:Dec 25 22:49:40 mushroom sshd(pam_unix)[4298]: session opened for user root by root(uid=0)
    你可以用编辑器打开/var/log/下的任意一个日志,都是这种结构

    SyslogD的参数开关位于/etc/sysconfig/syslog文件内,以下是该文件内容
    # Options to syslogd
    # -m 0 disables 'MARK' messages.
    # -r enables logging from remote machines
    # -x disables DNS lookups on messages recieved with -r
    # See syslogd(8) for more details
    SYSLOGD_OPTIONS="-m 0"
    # Options to klogd
    # -2 prints all kernel oops messages twice; once for klogd to decode, and
    #    once for processing with 'ksymoops'
    # -x disables all klogd processing of oops messages entirely
    # See klogd(8) for more details
    KLOGD_OPTIONS="-x"

    注意:修改了系统日志的配置文件后,需要重起syslog服务才能生效
    /sbin/service syslog restart即可
    ------------------------------------------
    redhat系统为了便于维护,提供了一个非常强大的GUI   log查看工具 system-logviewer(早期版本的

    redhat系统例如redhat 9是redhat-logviewer),通过此工具可以非常方便的查看、管理系统日志。

    大小: 143.55 K
尺寸: 400 x 288
浏览: 4 次
点击打开新窗口浏览全图

    system-logviewer工具的配置文件处于/etc/sysconfig/下的system-logviewer(早期版本的redhat系统例如redhat 9是redhat-logviewer),用vi打开/etc/sysconfig/system-logviewer可以打开和修改相关配置信息。

    以下是本人系统中该文件的内容:)
    ---------------------------------------------------------------------------------------------------
    # Configuration File for Red Hat Log Viewer
    # Copyright (c) 2001-2003 Red Hat, Inc. all rights reserved.
    # Copyright (c) 2001-2003 Tammy Fox <tfox@redhat.com>

    # Log file names
    SYSLOG=/var/log/messages
    SECURELOG=/var/log/secure
    MAILLOG=/var/log/maillog
    CRONLOG=/var/log/cron
    NEWSLOG=/var/log/spooler
    BOOTLOG=/var/log/boot.log
    CIPELOG=/var/log/cipe.log
    DMESGLOG=/var/log/dmesg
    HTTPDACCESSLOG=/var/log/httpd/access_log
    HTTPDERRORLOG=/var/log/httpd/error_log
    MYSQLLOG=/var/log/mysqld.log
    RPMLOG=/var/log/rpmpkgs
    TUXLOG=/var/log/tux
    UP2DATELOG=/var/log/up2date
    FTPLOG=/var/log/vsftpd.log
    XFREE86LOG=/var/log/XFree86.0.log
    XORGLOG=/var/log/Xorg.0.log

    # How often to refresh messages, in seconds
    # If set below 30 seconds, it defaults to 30 seconds
    REFRESHRATE=30

    ## Words to show alert icon for
    ## Comma-delimited list, not case-sensitive
    ALERTWORDS=fail,denied,rejected,oops,segfault,segmentation

    ## Words to show warning icon for
    ## Comma-delimited list, not case-sensitive
    WARNINGWORDS=warn
    ---------------------------------------------------------------------------------------------------

  • Samba Server配置与使用

    2007-01-05 00:55:12Top 3 Digest 3

    Samba Server配置与使用
    文档说明
    本人初次研究Samba Server,难免出现谬误,请指正
    联系作者:
    E-Mail:yang119345@gmail.com
    MSN:yang119345@msn.com
    QQ:150272988
     
    1.      Samba简介
    samba server的主要作用就是提供linux和windows之间文件/打印机共享
    注意:Windows端必须要安装tcp/ip协议,这样才能确保Linux,Windows之间用samba共享。
    samba项目的主页- http://www.samba.org (最近台湾地震,上不去,郁闷)
    samba的包主要分为rpm和tarball包两种,以下我们以Fedora Core/RedHat linux的rpm包安装方式讲解
     
    2.      Fedora Core/RedHat linuxSamba套件主要分为4个包
    samba daemon                            samba服务器的主软件包
    samba-client                        samba客户端工具
    samba-common                    samba相关的工具和库文件包
    samba-swat                          samba本机基于web的图形化samba配置工具
     
    3.      获得samba软件包
    1.         官方网站下载samba
    2.         系统安装盘中获得,光盘里面找找,一般在第一张光盘:)Fedora Core/RedHat linux
     
    4.      安装
    将所有samba相关的rpm包放入到同一个文件夹中
    然后切换到root权限(用su切换)
    #rpm -ivh samba*.rpm然后回车即可完成安装
    安装好后检查软件包是否安装
    #rpm -qa samba
    如果安装了就会返回软件的包名,例如
    # rpm -qa samba*
    samba-common-3.0.10-1.4E.9
    samba-3.0.10-1.4E.9
    samba-client-3.0.10-1.4E.9
    samba-swat-3.0.10-1.4E.9
    以上仅供参考,具体显示的版本号,根据版本的不同有所区别:)
     
    5.      Samba相关命令
    smbtree
    作用:显示局域网中所有主机和目录列表
    用法:smbtree [-b] [-D] [-U username%password]
    例如:
    #smbtree
    Password:<----这里直接回车表示匿名访问
    WORKGROUP
            \\MUSHROOM 
                    \\MUSHROOM\ADMIN$                IPC Service (Samba Server)
                    \\MUSHROOM\IPC$                  IPC Service (Samba Server)
                    \\MUSHROOM\test                  Access to test directory
     
    nmblookup
    作用:显示一台主机的netbios的ip地址
    用法:nmblookup 主机的netbios名
    例如:
    #nmblookup samba
    querying samba on 192.168.2.255
    192.168.2.2 samba<00>
     
    smbclient
    作用:显示/登陆局域网中的共享主机
    用法:smbclient -L host -U username%passwd
                   smbclient //host/share
    例如:   
    #smbclient -L 192.168.2.111 -U administrator #以管理员身份显示192.168.2.111 xp主机共享内容
    Password:<--输入主机管理员密码回车
    Domain=[MUSHROOM] ōS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
     
            Sharename       Type      Comment
            ---------       ----      -------
            E$              Disk      Default share
            project         Disk
            IPC$            IPC       Remote IPC
            D$              Disk      Default share
            I$              Disk      Default share
            K$              Disk      Default share
            G$              Disk      Default share
            F$              Disk      Default share
            ADMIN$          Disk      Remote Admin
            H$              Disk      Default share
            C$              Disk      Default share
    session request to 192.168.2.111 failed (Called name not present)
    session request to 192 failed (Called name not present)
    Domain=[MUSHROOM] ōS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
     
            Server               Comment
            ---------            -------
     
            Workgroup            Master
            ---------            -------
    看到192.168.2.111主机存在一个project共享目录,那我们现在进入这个目录,如下命令
    # smbclient //192.168.2.111/project administrator
    Domain=[MUSHROOM] ōS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
    smb: \> ls
     .                                   D        0 Mon Jun 12 14:02:28 2006
      ..                                  D        0 Mon Jun 12 14:02:28 2006
     c                                   D        0 Mon Jun 12 14:02:21 2006
     vbs                                 D        0 Mon Jun 12 14:02:26 2006
     
                    60023 blocks of size 262144. 9259 blocks available
    注意出现smb:\>说明登陆成功了(风格比较象ftp),可以输入help命令查看smb客户端工具的命令集:)
    输入q推出smb客户端。
     
    smbmount
    作用:远程挂载共享目录
    用法:smbmount //host/share /mountpoint -o username=username%passwd
    例如:要将192.168.2.111主机的project共享目录挂载到本机的/media/netshare(记得先创建此目录哦)下,命令如下
    smbmount //192.168.2.111/project /media/netshare -o username=administrator%12345678
    (当然用mount –t smbfs //192.168.2.111/project /media/netshare也可以)
    呵呵,稍等就挂载好了。然后就能像访问本地目录一样访问了,ls /media/netshare看看.哈
    如果要卸载共享目录那就用smbumount /mountpoint(umount /mountpoint也可以)即可
    例如:卸载刚才挂载的目录smbumount /media/netshare回车就okey了。
     
    smbtar
    作用:远程打包共享主机中的文件
    用法:smbtar -s server -u user -p password -x sharename -t output_file
    例如:smbtar -s 192.168.2.111 -u administrator -p 12345678 -x project -t project.tar
    如果成功会在当前目录下生成一个project.tar文件,用tar -tvf project.tar查看下tar包的内容。
    huh~~
    #tar -tvf project.tar
    tar: Record size = 4 blocks
    drwxr-xr-x 0/0               0 2006-06-12 14:02:21 ./c/
    drwxr-xr-x 0/0               0 2006-06-12 14:02:26 ./vbs/
    比较下里面的东西和你主机共享是否相同:)
    注意:redhat linux 9光盘中提供的samba套件的smbtar有个bug,就是他不管你输入不输入用户名和密码他默认就是用匿名登陆的
    这样照成如果一个共享目录匿名没有权限,那打包的时候打包文件大小为0kb。
    解决方法:只要用编辑器打开/usr/bin/smbtar然后移动到该文件的倒数第二行,将里面的-N参数去掉即可。即:改为
    eval $SMBCLIENT "'\\\\$server\\$service'" "'$password'" -U "'$username'" \
    -E $log -D "'$cdcmd'" ${clientargs} \,然后保存退出即可。以后的版本貌似修复了这个bug :)
     
    6.      samba服务器配置
    1.         用samba-swat工具,该工具提供了一个web界面来实现配置samba的配置非常简单,在此就不多介绍了。
    浏览器中输入http://localhost:901 然后认证框中输入root和root密码回车即可出现以下界面

    大小: 60.65 K
尺寸: 400 x 391
浏览: 6 次
点击打开新窗口浏览全图

     
    如果输入http://localhost:901显示访问失败,那么可能没有打开swat,我们用编辑器打开/etc/xinetd.d/swat,如下
     
    # default: off
    # descrīption: SWAT is the Samba Web Admin Tool. Use swat \
    #              to configure your Samba server. To use SWAT, \
    #              connect to port 901 with your favorite web browser.
    service swat
    {
            disable = yes(一定要将此处改为no)
            port            = 901
            socket_type     = stream
            wait            = no
            only_from       = 127.0.0.1
            user            = root
            server          = /usr/sbin/swat
            log_on_failure += USERID
    }
    修改完毕,保存退出,然后重新启动xinetd服务,service xinetd restart回车,即可:)
    2.         手工配置/etc/samba/smb.conf文件
    配置完后,需要保存配置文件,然后service smb restart才能生效配置J
    1)        配置Smb.conf文件前准备
    该文件分为三种类型的配置字段
    [global] 全局参数设置,samba服务器配置文件的命脉所在
    [home] 用户HOME目录共享配置
    用户自定义字段 用户根据自己的需求配置的共享字段
    以下是我的smb.conf文件内容中的global选项
    注意:该配置文件包含两种注释,#和;,井号注释掉的是帮助信息,而分号注释掉的是个选项,去掉分号该选项可用
    [global]
            workgroup = vm            #所处的域或者工作组名
            netbios name = SAMBA     #netbios主机名
            server string = Samba Server      #主机的描述信息
            security = SHARE #samba服务器的安全级别,常用有share/user/server三种安全级别
                                       #share 无需验证就能访问samba服务器
                                       #user 需要用户验证通过才能访问
                                       #server 需要用户验证才能访问,和user的区别就是,
    它的认证信息保存在一个服务器上
                                       #如果选择了server安全级别,要多加一个选项即 
    password server = <主机名/ip地址>
            log file = /var/log/samba/%m.log   #samba服务器的访问日志,其中的%m是变量
    表示netbios名,例如netbios名为mushroom的主机访问了本机的samba服务器,那么访问日志会保
    存在/var/log/samba/mushroom.log,其他变量参数详见man smb.conf
             ;encrypt passwords = yes        #加密密码
             ;smb passwd file = /etc/samba/smbpasswd #samba的用户帐号文件,存放帐号和
    密码
             ;include = /etc/samba/smb.conf.%m #包含外部的配置文件,如果你对每个客户机设
    置不同的配置选项的话,可使用此选项
             ;interfaces = 192.168.0.0/24
             #设置samba工作的网络接口,注释
    掉此项则工作在所有可用的网络接口
             ;name resolve order = wins lmhost bcast 
    #主机名解析顺序wins服务器->本机/etc/samba/lmhost文件->广播。
             ;wins support = yes              
    #支持使用wins服务器,wins服务器主要提供netbios名字服务
             ;wins server = 192.168.2.5       
    #存放主机名的wins服务器
            max log size = 50        
    #最大日志大小,单位是KB
            socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 
    #这个选项用来设置客户端和samba服务器通信时的socket选项,比较复杂
    #详细见man smb.conf中的socket options节选。
            ;printcap name = /etc/printcap             #打印机配置文件
            dns proxy = No                #dns代理服务器
            ;cups options = raw      #通用打印机系统配置       
            disable spoolss = yes    #去除客户端访问的时候,显示的共享打印机目录
     
    #其实samba的global选项非常多,以上只列出了常用的几个,更多详见man smb.conf文件
     
    [homes]
            comment = Home Directories         #共享注释
            writeable = yes           #可写选项
            browseable = No          #可浏览选项
     
    [printers]
            comment = All Printers             #共享注释
           path = /var/spool/samba   #共享路径
            printable = Yes #可打印选项
            browseable = No #可浏览选项
     
    [test]
            comment = Access to test directory
            path = /test
            public = yes
            writeable = yes
            guest ok = yes
    2)        访问控制
    全局访问控制——控制本服务器所有的共享目录访问
    [global]
           Hosts deny = ALL
           Hosts allow = 192.168.2.      <-此处等号右面的书写规则详见
    man 5 hosts_access中的PATTERNS节选,那里有明确的定义规则
    #只允许192.168.2网段访问
    局部访问控制——仅控制该字段内的的目录访问
    [test]
           Hosts deny = 192.168.2.
           Hosts allow = 192.168.2.111
    #test字段只允许192.168.2.111以及192.168.2网段以外的主机访问
           如果要设置192.168.2网段中除了192.168.2.111主机其他都能访问,那设置如下
                  Hosts allow = 192.168.2. except 192.168.2.111
    注意:如果以上规则deny和allow出现冲突时,allow优先于deny,全局优先于局部。
    word原稿请到以下联接下载:)
  • APT维护red hat linux 9

    2007-01-05 01:04:17Top 1 Digest 1

    OS:red hat linux 9.0 以下简称RH9

    Debian APT机制: http://www.debian.org/doc/manuals/apt-howto/ 

    有经验的Linux系统管理员一定吃过不少Linux软件依赖的苦,安装了一个软件,系统提示缺少XX库,缺少XX软件,缺少....为了解决此问题然后地毯式的搜索缺少的文件,费时费力,其实大可不必去地毯式的搜索!很多开源社区同样遇到此问题,并且分别制定了解决方案。像Debian的APT,FreeBSD的ports,Yellow dog的YUM等都是用来解决文件依赖的包管理系统。Conectiva Linux将apt系统移植到了使用rpm软件包管理系统的Linux系统下,使得基于RPM软件包的系统可以利用apt工具提供的自动解决倚赖关系的能力。此文就是教您如何使用APT来维护RH9,来解决软件依赖问题。在此提供两个本人常去的apt网站http://freshrpms.net  http://apt.unl.edu

    首先下载并安装APT for RH9 其他版本的RH系统请到http://apt.freshrpms.net自行下载:)

    # wget -c http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm

    # rpm -ivh apt-0.5.5cnc6-fr1.i386.rpm

    更新apt源,然后安装图形化的apt-synaptic :
    # apt-get update
    # apt-get install synaptic

    安装完毕后Synaptic会出现在GNOME/KDE的"系统设置"菜单里面,直接在终端运行synapitc也可以运行

    使用apt-------------------------------

    在redhat上面使用apt和在debian下面使用几乎完全一样,配置文件在/etc/apt/,按照前面介绍安装好apt之后就可以使用并可以更新redhat提供的RPM更新以及freshrpms.net提供的更新了。主要运行命令如下:

    (1)更新软件列表,获取远程rpm服务器上的软件列表和相互依赖关系列表,所有可用软件的下载地址都在/etc/apt/sources.list里面定义,下面的多数下载操作地址也是在这里定义的。

    # apt-get update

    (2)检查本地软件依赖关系合法性,由于rpm系统的问题,很多系统会存在一些依赖问题,用下面命令检查依赖关系,同时apt-get会提供一些修复方案,只有本机没有依赖关系问题了才能良好地使用apt-rpm。一个新安装的干净系统不会有依赖关系问题。

    # apt-get check

    (3)安装或升级一个新软件

    # apt-get install package-name

    package-name是rpm包的名字的前面部分,不包含版本号,如果选择不同的处理器类型,可以在后面添加@i686等标识。

    (4)升级所有系统软件

    # apt-get upgrade

    (5)全面升级,比upgrade更加智能化的升级,同时解决升级时的一些依赖关系

    # apt-get dist-upgrade

    (6)卸载软件,同时卸载依赖软件

    # apt-get remove package-name

    (7)清除本地下载的rpm包,rpm包下载后保存在/var/cache/apt/archieves下面,本命令清除已下载安装过的rpm文件

    # apt-get clean

    以上所有命令都可以通过图形界面的前端软件Synaptic完成,图形化的软件使用起来更加直观,理解了前面几个主要命令,就可以毫无困难地使用Synaptic了,所以本文不再赘述Synaptic的使用方法了。

    详细过程如图所示:

    图片附件(缩略图):
  • Ubuntu 7.04 Herd 5 发布

    2007-03-03 12:28:41

    这是昨天刚发布的 Ubuntu 7.04(开发代号“Feisty Fawn”)的第 5 个(同时也是最后一个)Alpha 测试版,下一次发布的将是第 1 个 Beta 测试版。现在离 Ubuntu 7.04 的最终发布(4 月 19 日)只剩一个半月时间了。本次发布的亮点主要是,增强稳定性和排除已知错误。

    Ubuntu 7.04 Herd 5 的主要更新包括:

    • 已经更新了 Human 主题,并使用了新的默认墙纸、启动屏幕和登录屏幕。
    • 增强了 VPN 的易用性。
    • 桌面效果可从系统菜单一键激活。
    • Xorg 更新到了 7.2 版。

    Herd 5 的 Ubuntu、Kubuntu、Xubuntu、Edubuntu 的 ISO 文件可从以下地址下载。

    更多信息,可以查阅 Ubuntu 官方站点

  • Python下载百度新歌100的代码

    2007-02-07 17:00:28

      1 #!/usr/bin/python 
      2 # -*- coding: utf-8 -*- 
      3 # Copyright (c) 2006 UbuntuChina <http://www.ubuntu.org.cn> 
      4 # License: GPLv2 
      5 # Author: oneleaf <oneleaf AT gmail.com> 
      6 # hack by ct <ctqucl AT gmail.com> 
      7 
      8 import httplib
      9 import re
     10 import urllib
     11 import os
     12 import locale
     13 global m,topid
     14 global fsize
     15 fsize=2     #文件大小下限(M) 
     16 m='0'       #'-1'=任意  '0'=mp3 '1'=rm '2'=wma '3'=asf '4'=ram '5'=mid '6'=flash 
     17 topid='1'
     18 
     19 if topid=='0':
     20      topid='/list/newhits.html'         #新歌100 
     21 elif topid=='1':
     22      topid='/topso/mp3topsong.html'     #Top500 
     23 elif topid=='2':
     24      topid='/list/oldsong.html'         #老歌经典 
     25 elif topid=='3':
     26      topid='/list/movies.html'          #电影金曲 
     27 elif topid=='4':
     28      topid='/list/tvs.html'             #电视歌曲 
     29 elif topid=='5':
     30      topid='/minge/mp3topsong.html'     #民歌精选 
     31 elif topid=='6':
     32      topid='/xiaoyuan/mp3topsong.html'  #校园歌曲 
     33 elif topid=='7':
     34      topid='/list/liujinsuiyue.html'    #流金岁月(new) 
     35 elif topid=='8':
     36      topid='/list/yaogun.html'          #摇滚地带 
     37 
     38 
     39 def getdownfileurl(url):                #获取歌曲页的试听URL 
     40     url = "http://220.181.27.54/m"+url
     41     tn = re.search('&tn=(.*)&word',url).group(0)
     42     url=url.replace(tn,'&tn=baidusg,mp3%20%20&word')
     43     try:
     44         urlopen = urllib.URLopener()
     45         fp=urlopen.open(url)
     46         data = fp.read()
     47         fp.close()
     48     except IOError, errmsg:
     49         print errmsg
     50     expression2='"_blank">(.*)</a></a></li>'
     51     url = re.search(expression2, data).group(0)[16:-13]
     52     try:
     53         url="http://"+urllib.quote(url)
     54     except:pass
     55     #print u"发现 "+url 
     56     return url
     57 
     58 def getdownurl(url):                     #从歌曲页抓取URL列表 
     59     urllist=[]
     60     urllist1=[]
     61     urllist2=[]
     62     conn = httplib.HTTPConnection('mp3.baidu.com')
     63     conn.request("GET",url)
     64     response = conn.getresponse()
     65     html=response.read()
     66     conn.close()
     67     expression2='http://220.181.27.54/m(.*)" target'
     68     listSentence2 = re.findall(expression2, html)     #抓取链接列表 
     69     filesize=re.findall('<td>(.*)M</td>',html)        #抓取文件大小 
     70     lineno=0
     71     while lineno<len(listSentence2):
     72         mp3url=getdownfileurl(listSentence2[lineno])  #转换链接为最终下载地址 
     73         urllist1.append(mp3url)
     74         lineno+=1
     75     urllist=map(None,urllist1,filesize)
     76     return urllist
     77 
     78 def downmp3(url,author,name,filelist):    #下载歌曲 
     79     filename=author+"-"+name;
     80     for i in filelist:
     81         name=unicode(i,locale.getpreferredencoding())
     82         if name.find(filename) == 0:      #忽略 
     83             print u"文件已经下载,忽略。"
     84             return 1
     85     urllists=getdownurl(url)              #获取文件url列表 
     86     lineno=0
     87     while lineno<len(urllists):
     88         print u"尝试",urllists[lineno][0]
     89         ext=urllists[lineno][0][-4:]      #获取文件名后缀(最后4位) 
     90         try:
     91             lineno+=1
     92             print urllists[lineno-1][1] +'M'
     93             if float(urllists[lineno-1][1])>float(fsize) :   #大小符合则下载 
     94                   urlopen = urllib.URLopener()
     95                   fp=urlopen.open(urllists[lineno-1][0])
     96                   data = fp.read()
     97                   fp.close()
     98                   filename=filename+ext;
     99                   file=open(filename,'w+b')
    100                   file.write(data)
    101                   file.close()
    102                   print u"下载成功!"
    103                   return 1
    104             elif float(urllists[lineno][1])<float(fsize) :   #不符则略过 
    105                   print u"文件太小,忽略!"
    106         except:
    107             continue
    108     return 0
    109 
    110 if __name__ == "__main__":
    111     conn = httplib.HTTPConnection('list.mp3.baidu.com')
    112     conn.request("GET",topid )  #类型 
    113     response = conn.getresponse()
    114     html=response.read().decode('gbk')
    115     conn.close()
    116     expression1='border">(.*).</td>'
    117     expression2='><a href="http://mp3.baidu.com/m(.*)</a>'
    118     expression3='href="http://mp3.baidu.com/m(.*)</td>'
    119     listSentence1 = re.findall(expression1, html)   #编号特征 
    120     listSentence2 = re.findall(expression2, html)   #歌曲名特征 
    121     listSentence3 = re.findall(expression3, html)   #歌手名特征 
    122     lineno=0
    123     while lineno<len(listSentence1):
    124        listSentence2[lineno]=listSentence2[lineno].replace('m=-1','m=' + m) #指定格式 
    125        url=re.search('(.*)target',listSentence2[lineno])
    126        url='/m'+url.group(0)[:-8]
    127        idno=listSentence1[lineno]
    128        name=re.search('blank>(.*)',listSentence2[lineno])
    129        name=name.group(0)[6:]
    130        dirty=re.search('</A>/<A  href=(.*) target=_blank>',listSentence3[lineno])
    131        if dirty is not None :             #合唱 
    132       author1=re.search('>(.*)</A>/<A',listSentence3[lineno])
    133       author1=author1.group(0)[1:-7]
    134       author2=re.search('/<A  href=(.*)</A>',listSentence3[lineno])
    135       author2=re.search('>(.*)<',author2.group(0))
    136       author2=author2.group(0)[1:-1]
    137       author=author1 + '+' + author2
    138        elif dirty is None :               #独唱 
    139            author=re.search('blank>(.*)</',listSentence3[lineno])
    140            author=author.group(0)[6:-2]
    141        print u"开始下载",idno,name,author
    142        filelist=os.listdir('.');
    143        if downmp3(url,author,name,filelist)==0:  #判断失败 
    144           print u"下载",author,name,u'失败!'
    145        lineno+=1
    146 
    转自:http://forum.ubuntu.org.cn/viewtopic.php?t=15682
  • [论坛] 死了都要买

    2007-02-04 20:28:15

    死了都要买
    不淋漓尽致不痛快
    队伍多长只有这样
    才值得等待
    死了都要买
    不等到最后不痛快
    飞机撞楼心还在
    把买票当成是末日来相爱
    一分一秒都美到泪水掉下来
    不理会别人是看好或看坏
    只要你勇敢跟我排
    票不用刻意安排
    凭感觉去等待排队就会很愉快
    享受现在别一开始就怕队伍长
    许多奇迹我们相信才会存在
    死了都要买
    不淋漓尽致不痛快
    车票多少只有这样才足够珍惜
    死了都要买
    不排到微笑不痛快
    宇宙毁灭心还在
    穷途末路都要排
    不极度漫长不痛快
    发会雪白土会掩埋
    车票不腐坏
    到绝路都要排
    不天荒地老不痛快
    不怕车站变火海
    排到最后才精采
  • 设置eclipse为中文界面

    2007-02-04 17:47:22

    最近蘑菇赶赶时髦,下载了eclipse3.2.1以及pydev插件学习python,这个东西真的很强大,很多小功能也非常贴心,就是体积和速度不理想,嘎嘎,我的机器上速度还可以:)

    去以下网址下载eclipse最新版本以及相应的语言包(通常文件名为editionNumber_language_packs,例如eclipse3.2.1就对应3.2.1_Language_Packs

    http://download.eclipse.org/eclipse/downloads/

    将eclipse和语言包解压到一个目录例如d:\eclipse(注意先后顺序,先eclipse主程序包,然后语言扩展包),搞定以后在eclipse的目录下新建一个links文件夹,links文件夹里面新建一个language.start文件,该文件内容如下:

    path=d:\\eclipse\\zh_cn

    -------------------------------

    格式: path=eclipse路径\\语言缩写

    修改后重新启动eclipse,哇卡卡~中文完美显示,cool~

  • Ubuntu 7.04 Herd 3 发布

    2007-02-04 03:59:37

    Ubuntu 7.04 Herd 3 为 Ubuntu Feisty Fawn 的第 3 个 Alpha 测试版,该版本于今天下午发布。在 Herd 3 中,除了将既有软件更新到新的版本之外,在系统的安装、桌面的易用性方面也有所改善。

    Ubuntu Feisty Fawn Herd 3 所更新的软件主要包括:

    • GNOME 2.17.90
    • GTK+ 2.10.9
    • Ekiga 2.0.4
    • Epiphany 2.17.90
    • GEdit 2.17.4
    • Xfce 4.4

    另外,Linux 内核也更新到了 2.6.20-6。

    其他方面的改进包括:

    • 添加了一个 GNOME 控制中心,用于随用户的喜好来定制桌面,以及执行一些常见的系统配置任务。
    • 在 Ubuntu 的图形化安装程序中,新增了一个高级分区工具。
    • 桌面搜索上,提供了最新的 Tracker 和 Beagle 软件。
    • 在多媒体播放方面,使编码器的安装更为容易。

    随同 Ubuntu 7.04 Herd 3 一同发布的还有 Kubuntu、Edubuntu、Xubuntu 的相应版本。

    Download links:

  • QQ Hummer 蜂鸟 步步看[图文]

    2007-02-04 03:48:20

    QQ新闻QQ 蜂鸟 Alpha1 What's new:
    ==================
    1. 全新设计的用户界面,给您带来全新的使用体验
    2. 全新设计的通讯录,存储和管理联系人随时随地
    3. 全新设计的快捷服务栏和服务中心,启动和管理增值服务方便快捷
    4. 支持电子邮件地址作为QQ帐号登录,方便易记并享受新邮件提醒服务
    5. 新增忙碌状态表现,并提供更多自定义状态设置
    6. 新增联系人搜索和筛选功能,方便快速查找、定位和筛选联系人
    7. 新增消息盒子功能,方便管理和接收消息
    8. 新增日历服务插件,方便安排日程和设置提醒

    (第一部分)

    安装界面

    启动画面

    明天放出具体使用情况哈~~呵呵~


    非常感谢 咪咪 的投递!


     来源:世界的大脑

  • 腾讯下一代产品—QQ 蜂鸟 CodeName:Hummer

    2007-02-04 03:46:11

    轻-薄-快 的新体验:较之以前,我们采用了更为科学的应用服务架构,优化基础IM服务的质量和性能,创造了“轻-薄-快”的全新QQ体验。

    根据之前透露的2007年腾讯公司的开发计划,我们列出以下产品/产品线(有些应该还只是开发代号或者内部称呼):

    1. QQ School
    2. QQ Work
    3. QQ Home
    4. QQ P2P

    产品/产品线的区分:QQ、Hummer、TM分别对应着一般用户、高端用户、企业组织。而RTX对应着企业内部通讯系统,不在此列之中。

    QQ Hummer寻求向互联网高端人群市场突围,以改变目前腾讯QQ多数为“中低端用户”的认知形象。

    我们现在已经可以看到了QQ Hummer(蜂鸟)的一些资料,这个Hummer不同于QQ和TM,类似于MSN Messenger(Live Messenger):

    全新的界面体验

    全新设计的用户界面,给您带来全新的使用体验QQ蜂鸟界面采用浅灰色的主色调,全面提升了界面的立体感和光泽度.拥有完美质感的同时,细节性的曲线设计也足见深厚的UI功底,充满艺术美感.QQ 蜂鸟全新设计了主面板和各操作界面,并增加了用户的自定义设置项,更好的满足用户个性化需求.

    全新设计的快捷服务栏和服务中心,启动和管理增值服务方便快捷在QQ 蜂鸟中,为了方便用户更好的管理和使用增值服务,我们全新引入了快捷服务栏和服务中心的设计.您只要轻点主面板下方按钮,就会在主面板侧边位置展现常用的快捷服务.另外我们还提供了服务与设置中心,在这里您可以对这个帐号相关的所有使用偏好、增值业务等进行全面管理.

    新增消息盒子功能,方便管理和接收消息

    在QQ蜂鸟中,我们充分吸取了TM中的消息盒子特性,为您提供了免打扰、更体贴的接收消息模式,让您的消息接收习惯更私人化,选择的空间更大.未查看消息将自动保存在“消息盒子”里,随时用鼠标移到QQ图标时,“消息盒子”会自动显示所有缩略的未查看消息(如下图),可根据需要有选择优先查看,不重要消息则在不繁忙时再查看.

    全新设计的通讯录,存储和管理联系人随时随地

    QQ 蜂鸟中的通讯录全面集成了原有好友管理器的功能,提供了强大的联系人管理和查看功能,您可以选择各种视图展示联系人信息,也可以像在主面板一样给联系人发起会话:同时,新版通讯录还包含了人性化功能,如可以按工作资料和个人资料分类展示信息,自定义排序规则等.

    支持电子邮件地址作为QQ帐号登录,方便易记并享受新邮件提醒服务

    QQ 蜂鸟支持电子邮件地址作为账号登录,您可以使用自己最常用的电子邮箱注册成为QQ帐号,即可方便的登录QQ,再也不用担心忘记QQ号码了,在您使用电子邮箱地址登录后,还可享受到新邮件提醒服务,让您处理邮件收发自如.

    新增忙碌状态表现,并提供更多自定义状态设置

    是不是觉得现在的在线状态不够用,是不是觉得自动回复太骚扰?在QQ 蜂鸟中我们新增了忙碌状态选项,并且提供了更多自定义状态设置,您只要自定义了当前的状态描述,您的好友不需要跟你发消息,即可在主面板好友列表 、会话框位置实时的看到您的详细状态信息.

    新增日历服务插件,方便安排日程和设置提醒

    这是一个帮助您提高效率的工具,通过QQ日历您可以方便安排日程,轻松设置提醒;QQ日历,轻轻松松管理,随时随地使用.

    这款产品的内部代号为蜂鸟计划,软件暂定名为QQ Hummer(QQ蜂鸟),在外观界面及功能特点上模仿其主要对手微软MSN,并期望以此打破MSN占据多数高端市场、而腾讯QQ主要为中低端市场的局面。

    腾讯实施蜂鸟计划,旨在为用户提供即时通信、关系管理、增值业务为一体的IM软件,并在操作界面上力求简洁,使其更符合中高端用户的使用习惯。

    观察人士称,腾讯借助QQ蜂鸟突围高端市场的计划将面临严峻挑战,除了MSN等传统对手的封杀,还将面临Google Talk、飞信等有力的竞争对手。

    作为领先的即时通信服务提供商,腾讯公司一直致力于为用户提供更便捷的即时通信服务。蜂鸟计划就是腾讯公司为了更好的满足用户需求成立的一个项目计划,在这个计划中我们致力于为用户提供更高效的通信服务,更便捷的关系管理服务,更简洁易用的用户操作界面和更灵活的增值业务。为了实现蜂鸟计划中的目标,我们一直不断的努力尝试各种的新概念、新技术、新风格,并认真的听取用户的意见和建议,不断改进产品,最终将最优秀的产品呈献给所有互联网用户。

    目前QQ蜂鸟仅针对部分用户开放内测,根据计划向用户有选择的发送测试邀请函。


    感谢 咪咪 的投递!



     来源:世界的大脑

  • 谣传~【自由软件基金会正在考虑禁止Novell发行Linux】

    2007-02-04 03:39:40

    今天看到《自由软件基金会正在考虑禁止Novell发行Linux》文章大惊,不是吧?说禁止就禁止?

    以下是该文章的原文

    ----------------------------------------
    Linux新闻主题据国外媒体报道,Linux世界的“外来户”Novell公司和微软公司达成有关软件专利的协议,这在开源业界当中引发了愤怒.二月二日,拥有Linux核心知识产权的自由软件基金会表示,他们正在考虑一些开源业界的建议,即禁止Novell公司发行Linux操作系统.

      自由软件基金会的首席律师摩格伦表示,开源业界希望他们采取各种手段干预Novell和微软公司的合作,他们有各种理由担心,这将是微软公司利用专利大棒攻击开源业界的开始.

      去年11月份,Novell公司宣布和微软公司签署多项合作协议,除了在提高Linux和Windows操作系统的兼容性方面,微软公司还表示,将不会对Novell Suse Linux用户提起软件专利侵权诉讼,开源业界认为,Novell公司“背叛”了开源业界,并让其Linux产品获得了“凌驾”与其他Linux的“免遭诉讼”优势.此后,开源业界一部分批评人士认为,自由软件基金会应该禁止Novell公司继续使用(免费)Linux内核,并发行Suse Linux版本.

      摩格伦表示,自由软件基金会目前尚未作出决定,不过预计将在两个星期内宣布正式的决定.

      据悉,如果基金会禁令出台,禁令将会禁止Novell公司继续使用新版的Linux核心发行新的操作系统,新的开源许可协议预计将从三月份生效,这个协议已经对旧的协议进行了修改.

      Linux属于开源软件,任何开发人员都可以免费获得代码,进行修改,自行发行免费软件版本,并从技术服务方面获益.Novell公司原来并不属于开源业界,后来收购了Suse Linux操作系统,从传统的Netware提供商转变成全球两大Linux供应商之一.

      Novell公司的首席营销官Dragoon暂时未对新闻界作出评论.他说,他们需要看到自由软件基金会的正式决定,才能作出反应.
    来源:硅谷动力
    ----------------------------------------
    于是上linux-watch看了下根本就是一个谣传~嘛~~
    真是的
    http://www.linux-watch.com/news/NS6837365670.html
  • 灵格斯词霸

    2007-01-26 01:55:25

    今天发现了一款非常好的免费字典软件叫灵格斯词霸,和金山词霸相比更灵活字典可以根据自己的需要添加(界面有抄袭babylon嫌疑:)),但是他的字典比babylon的字典小很多,我系统内的babylon字典大小为600多mb,gosh~~见鬼了,换灵格斯后大概100mb。

    这个软件刚起步,功能还是比较基本的,但是够用了。不知道以后会不会收费

    以下是其官方网站http://www.lingoes.cn/index.html

    大小: 129.3 K
尺寸: 400 x 265
浏览: 0 次
点击打开新窗口浏览全图

  • 将vim设置为IE查看HTML源代码的工具

    2007-01-24 02:59:42

    记事本新建一个.reg后缀的文件,然后将下列内容写入其中,保存退出,然后双击它。重启你的IE,对一个网页右键--察看源代码 看看效果:)

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name]
    @="C:\\Program Files\\Vim\\vim70\\gvim.exe"

    以上路径改为您的vim安装路径即可:)

  • 我的VIM配置

    2007-01-23 10:41:33

     1 "////////////////////////////////////////////
     2 set nu!                     "显示行号
     3 set guifont=SimSun\ 10      "设置字体为宋体,大小为10
     4 colo jhlight                "设置颜色主题为,需搭配theme插件使用
     5 au FileType python source $VIMRUNTIME/plugin/python.vim
     6 "去掉工具条
     7 set guioptions-=T
     8 "去掉菜单
     9 "set guioptions-=m
    10 "开启vim默认最大化
    11 "au GUIEnter * simalt ~x 
    12 set nocompatible
    13 " 设定文件浏览器目录为当前目录 
    14 set bsdir=buffer
    15 set autochdir
    16 " 设置编码 
    17 "set enc=utf-8 
    18 " 设置文件编码 
    19 set fenc=utf-8
    20 " 设置文件编码检测类型及支持格式 
    21 set fencs=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
    22 source $VIMRUNTIME/delmenu.vim
    23 source $VIMRUNTIME/menu.vim
    24 " 设置语法高亮度 
    25 set syn=cpp
    26 " 查找结果高亮度显示 
    27 set hlsearch
    28 " tab宽度 
    29 set tabstop=4
    30 set cindent shiftwidth=4
    31 set autoindent shiftwidth=4
    32 " C/C++注释 
    33 set comments=://
    34 " 修正自动C式样注释功能 <2005/07/16> 
    35 set comments=s1:/*,mb:*,ex0:/
    36 " 增强检索功能 
    37 set tags=./tags,./../tags,./**/tags
    38 " 保存文件格式 
    39 set fileformats=unix,dos
    40 " 键盘操作 
    41 map <Up> gk
    42 map <Down> gj
    43 " 命令行高度 
    44 set cmdheight=1
    45 " 中文帮助
    46 if version > 603
    47     set helplang=cn
    48 endi
    49 
    50 " 配置minibufexpl插件
    51   let g:miniBufExplMapWindowNavVim = 1
    52   let g:miniBufExplMapWindowNavArrows = 1
    53   let g:miniBufExplMapCTabSwitchBufs = 1
    54   let g:miniBufExplModSelTarget = 1
    55 
    56 "TagList插件设置
    57   let Tlist_Use_Right_Window=1
    58   let Tlist_File_Fold_Auto_Close=1
    59 
    
  • 一小日本BT的VIM

    2007-01-22 13:55:12

    真的无语了,这字体,准保没用多少时间眼睛瞎掉:)

  • Best of Vim Tips 中文版

    2007-01-22 13:23:01

    这是篇每个 Vim 用户都应该阅读的文章,原文在这里
    http://www.rayninfo.co.uk/vimtips.html

    这篇文章很早被翻译过,好像是一个清华的哥们翻译的。我再原来的基础上又整理
    和新增了些内容--这是两年前做的,后来没有再更新。有兴趣的人可以继续更新。

    __BEGIN__
    ---------------------------------------------------------------------------­---
    # searching 查找
    /joe/e                      : cursor set to End of match
                                  把光标定位在匹配单词最后一个字母处
    /joe/e+1                    : cursor set to End of match plus 1
                                  把光标定位在匹配单词最后一个字母的下一个字母处
    /joe/s-2                    : cursor set to Start of match minus 2
                                  把光标定位在匹配单词第一个字母往前数两个字母的位置
    /^joe.*fred.*bill/          : normal
                                  标准的正则表达式
    /^[A-J]\+/                  : search for lines beginning with one or more A-J
                                  查找以一个或多个 A-J 中的字母开头的行
    /begin\_.*end               : search over possible multiple lines
                                  查找在 begin 和 end 两个单词之间尽可能多的行
    /fred\_s*joe/i              : any whitespace including newline
                                  查找在 fred 和 joe 两个单词之间任意多的空格,包括新行
    /fred\|joe                  : Search for FRED OR JOE
                                  查找 fred 或 joe
    /\([^0-9]\|^\)%.*%          : Search for absence of a digit or beginning of line
                                  查找
    /.*fred\&.*joe              : Search for FRED AND JOE in any ORDER!
                                  查找同时包含 FRED 和 JOE 的行,不分前后顺序
    /\<fred\>/i              : search for fred but not alfred or frederick
                                  查找 fred, 而不是 alfred 或者 frederick,也就是全字匹配
    /\<\d\d\d\d\>            : Search for exactly 4 digit numbers
                                  查找4个数字的全字匹配
    /\D\d\d\d\d\D               : Search for exactly 4 digit numbers
                                  查找4个数字的全字匹配
    /\<\d\{4}\>              : same thing
                                  同上

    # finding empty lines 查找空行
    /^\n\{3}                    : find 3 empty lines
                                  查找 3 行空行
    # Specify what you are NOT searching for (vowels)
    # 指定不要查找什么
    /\c\v([^aeiou]&\a){4}       : search for 4 consecutive consanants

    # using rexexp memory in a search
    # 在查找中使用正则表达式存储
    /\(fred\).*\(joe\).*\2.*\1

    # Repeating the Regexp (rather than what the Regexp finds)
    # 重复正则表达式
    /^\([^,]*,\)\{8}

    # visual searching
    # 可视模式下的查找
    :vmap // y/<C-R>"<CR>       : search for visually highlighted text
                                         查找被高亮显示的文本
    :vmap <silent> //    y/<C-R>=escape(@", '\\/.*$^~[]')<CR><CR> : with spec chars

    # searching over multiple lines \_ means including newline
    # 查找多行。\_ 表示包括新行
    /<!--\_p\{-}-->                : search for multiple line comments
                                         查找多行注释
    /fred\_s*joe/i                    : any whitespace including newline
                                         查找在 fred 和 joe 两个单词之间任意多的空
    格,包括新行
    /bugs\(\_.\)*bunny                : bugs followed by bunny anywhere in file
                                         bugs 后任意位置含有 bunny 单词的多个行
    :h \_                             : help
                                         帮助

    # search for declaration of subroutine/function under cursor
    # 查找光标下子程序/函数的声明
    :nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>

    # multiple file search
    # 在多个文件中查找
    :bufdo /searchstr
    :argdo /searchstr

    # How to search for a URL without backslashing
    # 如何不使用反斜线查找 URL
    ?http://www.vim.org/        : search BACKWARDS!!! clever huh!
    ----------------------------------------
    # substitution
    # 替换
    :%s/fred/joe/igc            : general substitute command
                                   普通替换命令
    :%s/\r//g                   : Delete DOS returns ^M
                                   删除 DOS 回车符 ^M

    # Is your Text File jumbled onto one line? use following
    # 你的文本文件是否乱七八糟的排成一行?使用如下命令
    :%s/\r/\r/g                 : Turn DOS returns ^M into real returns
                                   转换 DOS 回车符 ^M 为真正的回车符
    :%s=  *$==                  : delete end of line blanks
                                   删除行尾空格
    :%s= \+$==                  : Same thing
                                   同上
    :%s#\s*\r\?$##              : Clean both trailing spaces AND DOS returns
                                   删除行尾空格和 DOS 回车符
    :%s#\s*\r*$##               : same thing
                                   删除行尾空格和 DOS 回车符

    # deleting empty lines
    # 删除空行
    :%s/^\n\{3}//               : delete blocks of 3 empty lines
                                   删除三行空行
    :%s/^\n\+/\r/               : compressing empty lines
                                  压缩多行空行为一行

    # IF YOU ONLY WANT TO KNOW ONE THING
    # 如果你只想明白一件事情
    :'a,'bg/fred/s/dick/joe/igc : VERY USEFUL
                                   非常有用

    # duplicating columns
    # 复制列
    :%s= [^ ]\+$=&&=            : duplicate end column
                                   复制最后一列
    :%s= \f\+$=&&=              : same thing
                                   同上
    :%s= \S\+$=&&               : usually the same
                                   同上
    # memory
    # 记忆,或叫引用
    :s/\(.*\):\(.*\)/\2 : \1/   : reverse fields separated by :
                                   反转以 : 分隔的字段
    :%s/^\(.*\)\n\1/\1$/        : delete duplicate lines
                                   删除重复的行

    # non-greedy matching \{-}
    # 非贪婪匹配 \{-}
    :%s/^.\{-}pdf/new.pdf/      : delete to 1st pdf only
                                   只删除到第一个 pdf

    # use of optional atom \?
    :%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc : lowercase with optional leading characters
                                            不懂

    # over possibly many lines
    # 匹配尽可能多的行
    :%s/<!--\_.\{-}-->//        : delete possibly multi-line comments
                                      删除尽可能多的注释
    :help /\{-}                 : help non-greedy
                                   非贪婪匹配的帮助

    # substitute using a register
    # 使用寄存器替换
    :s/fred/<c-r>a/g         : sub "fred" with contents of register "a"
                                   用"a"寄存器里的内容替换"fred"
    :s/fred/\=@a/g              : better alternative as register not displayed
                                   更好的方法,不用显示寄存器内容

    # multiple commands on one line
    # 写在一行里的复杂命令
    :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/

    # ORing
    :%s/suck\|buck/loopy/gc     : ORing (must break pipe)
                                   不懂
    # Calling a VIM function
    # 调用 Vim 函数
    :s/__date__/\=strftime("%c")/ : insert datestring
                                    插入日期

    # Working with Columns sub any str1 in col3
    # 处理列,替换所有在第三列中的 str1
    :%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:

    # Swapping first & last column (4 columns)
    # 交换第一列和最后一列 (共4列)
    :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:

    # filter all form elements into paste register
    # 把所有的form元素(就是html里面的form啦)放到register里
    :redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
    :nmap ,z :redir @*<Bar>sil exec
    'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redir END<CR>

    # increment numbers by 6 on certain lines only
    # 不懂
    :g/loc\|function/s/\d/\=submatch(0)+6/

    # better
    # 更好的方法
    :%s#txtdev\zs\d#\=submatch(0)+1#g
    :h /\zs

    # increment only numbers gg\d\d  by 6 (another way)
    # 不懂
    :%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
    :h zero-width

    # find replacement text, put in memory, then use \zs to simplify substitute
    # 查找需替换的文本,保存,然后使用 \zs 命令简单替换
    :%s/"\([^.]\+\).*\zsxx/\1/

    # Pull word under cursor into LHS of a substitute
    # 不懂
    :nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\>#

    # Pull Visually Highlighted text into LHS of a substitute
    # 不懂
    :vmap <leader>z :<C-U>%s/\<<c-r>*\>/

    ----------------------------------------

    # all following performing similar task, substitute within substitution
    # Multiple single character substitution in a portion of line only

    :%s,\(all/.*\)\@<=/,_,g     : replace all / with _ AFTER "all/"

    # Same thing
    :s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#

    # Substitute by splitting line, then re-joining
    :s#all/#&^M#|s#/#_#g|-j!

    # Substitute inside substitute
    :%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
    ----------------------------------------
    # global command display (see tip 227)
    # 全局命令显示(参见 tip 227)
    :g/fred.*joe.*dick/         : display all lines fred,joe & dick
                                  显示所有包含fred,joe 和 dick 的行
    :g/\<fred\>/             : display all lines fred but not freddy
                                   显示所有全字匹配 fred 的行
    :g/<pattern>/z#.5        : display with context
                                   显示上下文
    :g/<pattern>/z#.5|echo "=========="  : display beautifully
                                               显示得很漂亮
    :g/^\s*$/d                  : delete all blank lines
                                   删除所有的空行
    :g!/^dd/d                   : delete lines not containing string
                                   删除所有行首不是 dd 的行
    :v/^dd/d                    : delete lines not containing string
                                  同上
    :g/fred/,/joe/d             : not line based (very powerfull)
                                   并不基于行(非常强大)
    :g/{/ ,/}/- s/\n\+/\r/g     : Delete empty lines but only between {...}
                                   删除在 {...} 只见的空行
    :v/./.,/./-1join            : compress empty lines
                                   压缩空行
    :g/^$/,/./-j                : compress empty lines
                                   压缩空行
    :g/<input\|<form/p    : ORing
                                   不懂
    :g/^/pu _                   : double space file (pu = put)
                                   把文件中空行增加一倍
    :g/^/m0                     : Reverse file (m = move)
                                   翻转文件
    :g/fred/t$                  : copy lines matching fred to EOF
                                   把匹配 fred 的行拷贝到文件最后
    :g/stage/t'a                : copy lines matching stage to marker a
                                   把匹配 stage 的行做标记a
    :%norm jdd                  : delete every other line
                                   隔一行删除一行

    # incrementing numbers (type <c-a> as 5 characters)
    :.,$g/^\d/exe "norm! \<c-a>": increment numbers
                                      增加每行行首的数字
    :'a,'bg/\d\+/norm! ^A          : increment numbers
                                      增加标记 a 到标记 b 只见每行行首的数字

    # storing glob results (note must use APPEND)
    # 保存全局命令的结果 (注意必须使用添加模式)
    :g/fred/y A                 : append all lines fred to register a
                                   添加所有为fred所匹配的行到register a
    :'a,'b g/^Error/ . w >> errors.txt

    # duplicate every line in a file wrap a print '' around each duplicate
    # 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
    :g/./yank|put|-1s/'/"/g|s/.*/Print '&'/

    # replace string with contents of a file, -d deletes the "mark"
    # 用文件中的内容替换字符串,-d 表示删除“标记”
    :g/^MARK$/r tmp.ex | -d

    ----------------------------------------

    # Global combined with substitute (power editing)
    # 全局命令和替换命令联姻 (强大的编辑能力)
    :'a,'bg/fred/s/joe/susan/gic :  can use memory to extend matching
                                     可以使用反向引用来匹配
    :g/fred/,/joe/s/fred/joe/gic :  non-line based (ultra)

    ----------------------------------------

    # Find fred before beginning search for joe
    # 先找fred,然后找joe
    :/fred/;/joe/-2,/sid/+3s/sally/alley/gIC

    ----------------------------------------

    # Absolutely essential
    # 基础

    ----------------------------------------
    * # g* g#           : find word under cursor (<cword>) (forwards/backwards)
                           寻找光标处的狭义单词(<cword>) (前向/后向)
    %                   : match brackets {}[]()
                           括号配对寻找 {}[]()
    .                   : repeat last modification

    matchit.vim         : % now matches tags <tr><td><scrīpt> <?php etc
                           使得 % 能够配对标记 <tr><td><scrīpt> <?php 等等
    <C-N><C-P>          : word completion in insert mode
                                 插入模式下的单词自动完成
    <C-X><C-L>          : Line complete SUPER USEFUL
                                 行自动完成(超级有用)
    /<C-R><C-W>         : Pull <cword> onto search/command line
                                 把狭义单词 <cword> 写到 搜索命令行
    /<C-R><C-A>         : Pull <CWORD> onto search/command line
                                 把广义单词 <cWORD> 写到 搜索命令行
    :set ignorecase     : you nearly always want this
                           搜索时忽略大小写
    :syntax on          : colour syntax in Perl,HTML,PHP etc
                           在 Perl,HTML,PHP 等中进行语法着色
    :h regexp<C-D>      : type control-D and get a list all help topics containing
                              按下 control-D 键即可得到包含有 regexp 的帮助主题的列表
                           regexp (plus use TAB to Step thru list)
                           (使用TAB可以实现帮助的自动补齐)
    ----------------------------------------
    # MAKE IT EASY TO UPDATE/RELOAD _vimrc
    # 使更新 _vimrc 更容易
    :nmap ,s :source $VIM/_vimrc
              # 译释:nmap 是绑定一个在normal模式下的快捷键
    :nmap ,v :e $VIM/_vimrc
              # 译释:在normal模式下,先后按下 ,s 两个键执行_vimrc,而 ,v 则是编辑_vimrc

    ----------------------------------------

    #VISUAL MODE (easy to add other HTML Tags)
    # visual 模式 (例子是:轻松添加其他的 HTML Tags)
    :vmap sb "zdi<b><C-R>z</b><ESC>  : wrap <b></b> around VISUALLY selected Text
                                                    在visual模式下选中的文字前后分别
    加上<b>和</b>
    :vmap st "zdi<?= <C-R>z ?><ESC>  : wrap <?=   ?> around VISUALLY selected Text
                                                 在visual模式下选中的文字前后分别加
    上<?= 和 ?>

    ----------------------------------------

    # Exploring
    # 文件浏览
    :Exp(lore)                      : file explorer note capital Ex
                                       开启目录浏览器,注意首字母E是大写的
    :Sex(plore)                     : file explorer in split window
                                       在一个分割的窗口中开启目录浏览器
    :ls                             : list of buffers
                                       显示当前buffer的情况
    :cd ..                          : move to parent directory
                                       进入父目录
    :args                           : list of files
                                       显示目前打开的文件
    :lcd %:p:h                      : change to directory of current file
                                       更改到当前文件所在的目录
    :autocmd BufEnter * lcd %:p:h   : change to directory of current file
    automatically (put in _vimrc)
                                       自动更改到当前文件所在的目录 (放到 _vimrc)

    ----------------------------------------

    # Buffer Explorer (Top Ten Vim scrīpt)
    # 缓冲区(buffer)浏览器 (第三方的一个最流行的脚本)
    # needs bufexplorer.vim  http://www.vim.org/scrīpt.php?scrīpt_id=42
    # 需要下载 bufexplorer.vim
    \be                             : buffer explorer list of buffers
                                       在缓冲区浏览器中打开缓冲区列表
    \bs                             : buffer explorer (split window)
                                       以分割窗口的形式打开缓冲区浏览器

    ----------------------------------------

    # Changing Case
    guu                             : lowercase line
                                       行小写
    gUU                             : uppercase line
                                       行大写
    Vu                              : lowercase line
                                       行小写
    VU                              : uppercase line
                                       行大写
    g~~                             : flip case line
                                       行翻转
    vEU                             : Upper Case Word
                                       字大写(狭义字)
    vE~                             : Flip Case Word
                                       字翻转(狭义字)
    ggguG                           : lowercase entire file
                                       把整个文章全部小写

    # Titlise Visually Selected Text (map for .vimrc)
    vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
    # Uppercase first letter of sentences
    # 大写所有句子的第一个字母
    :%s/[.!?]\_s\+\a/\U&\E/g

    ----------------------------------------

    gf                              : open file name under cursor (SUPER)
                                       取当前光标处的广义字作为文件名,然后试图打开它!
    ga                              : display hex,ascii value of char under cursor
                                       显示光标处字符的ascii,hex,oct,...
    ggVGg?                          : rot13 whole file
                                       用rot13编码整个文件
    ggg?G                           : rot13 whole file (quicker for large file)
                                       用rot13编码整个文件(对大文件更快一些)
    :8 | normal VGg?                : rot13 from line 8
                                       从第8行开始,用rot13编码后面的文本
    :normal 10GVGg?                 : rot13 from line 8
                                       从第8行开始,用rot13编码后面的文本

    # 【关于rot13——谁让英文是偶数个字母啊】
    # ROT13 是一种简单的编码,它把字母分成前后两组,每组13个,编码和解码
    # 的算法相同,仅仅交换字母的这两个部分,即:[a..m] --> [n..z] 和 [n..z]
    # --> [a..m] 。 ROT13 用简易的手段使得信件不能直接被识别和阅
    # 读,也不会被搜索匹配程序用通常的方法直接找到。经常用于 USENET 中发表一
    # 些攻击性或令人不快的言论或有简单保密需要的文章。
    # 由于 ROT13 是自逆算法,所以,解码和编码是同一个过程。

    <C-A>,<C-X>               : increment,decrement number under cursor
                                       增加,减少 光标处的狭义字所表示的数字
                                       win32 users must remap CNTRL-A
                                       Win32的用户可能需要重新定义一下Ctrl-A
    <C-R>=5*5                    : insert 25 into text (mini-calculator)
                                       插入25 (一个迷你计算器)

    ----------------------------------------

    # Makes all other tips superfluous
    :h 42            : also http://www.google.com/search?q=42
    :h holy-grail
    :h!

    ----------------------------------------

    # Markers & moving about
    # 标记和移动
    '.               : jump to last modification line (SUPER)
                        跳到最后修改的那一行 (超级有用)
    `.               : jump to exact spot in last modification line
                        不仅跳到最后修改的那一行,还要定位到修改点
    g;               : cycle thru recent changes (oldest first) (new in vim6.3)
                        循环跳转修改点(从最老的修改点开始) (vim6.3中新增)
    g,               : reverse direction (new in vim6.3)
                        反向循环跳转修改点 (vim6.3中新增)

    :changes
    :h changelist    : help for above
    <C-O>            : retrace your movements in file (starting from most recent)
                           依次沿着你的跳转记录向回跳 (从最近的一次开始)
    <C-I>            : retrace your movements in file (reverse direction)
                           依次沿着你的跳转记录向前跳
    :ju(mps)         : list of your movements
                        列出你跳转的足迹
    :help jump-motions
    :history         : list of all your commands
                        列出历史命令记录
    :his c           : commandline history
                        命令行命令历史
    :his s           : search history
                        搜索命令历史
    q/               : Search history Window
                        搜索命令历史的窗口
    q:               : commandline history Window
                        命令行命令历史的窗口
    :<C-F>        : history Window
                        历史命令记录的窗口
    ----------------------------------------
    # Abbreviations & maps
    # # 缩写和键盘映射
    :map   <f7>   :'a,'bw! c:/aaa/x
                      # 译释:map是映射一个normal模式下的键
                      # 这里是把F7键映射成把标记a到标记b中间的内容另存为一个文件/aaa/x
                      # 标记(mark)的方法:把光标移动到需要标记的地方,输入m,然后输
    入标记名,例如a
                      # 引用标记的方法:'a ,即:单引号加标记名
    :map   <f8>   :r c:/aaa/x
                      # 译释:把F8键映射成在当前位置插入文件/aaa/x的内容
    :map   <f11>  :.w! c:/aaa/xr<CR>
                      # 译释:.(点号)表示当前行
                      # 所以F11就是把当前行存为/aaa/xr
                      # 最后的<CR>表示一个回车
    :map   <f12>  :r c:/aaa/xr<CR>
    :ab php          : list of abbreviations beginning php
                        列出php表示的缩写
                      # 译释:定义一个缩写使用::iab hm hmisty
                      # 一个有趣的现象是,它列出的会是php和它的前子串开头的缩写
                      # 例如,有这么几个缩写:
                      # h => hmisty1 , hm => hmisty2 , hmi => hmisty3, m => hmisty4
                      # 那么使用 :ab hm会显示这么几个缩写:hm 和 h
                      # 而不是你想象中的 hm 和 hmi

    :map ,           : list of maps beginning ,
                        列出以逗号开始的键盘映射

    # allow use of F10 for mapping (win32)
    # 允许 F10 的映射用法 (win32)
    set wak=no       : :h winaltkeys
                        参见 :h winaltkeys

    # For use in Maps
    # 在键盘映射中常用的表示
    <CR>             : carriage Return for maps
                           回车
    <ESC>            : Escape
                           ESC
    <LEADER>         : normally \
                           转义符号 \
    <BAR>            : | pipe
                           管道符号
    <BACKSPACE>      : backspace
                           退格符号

    # display RGB colour under the cursor eg #445588
    # 显示光标下数值的 RGB 颜色
    :nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>

    ----------------------------------------

    # Using a register as a map (preload registers in .vimrc)
    :let @m=":'a,'bs/"
    :let @s=":%!sort -u"

    ----------------------------------------
    # List your Registers
    # 列出寄存器(Registers)
    :reg             : display contents of all registers
                       显示所有寄存器的内容
    :reg a           : display content of individual registers
                        显示 a 寄存器的内容
    "1p....          : retrieve numeric registers one by one
    :let @y='yy@"'   : pre-loading registers (put in .vimrc)

    ----------------------------------------

    # Useful tricks
    # 有用的窍门
    "ayy@a           : execute "Vim command" in a text file
                        把当前行作为一个Vim命令来执行
    yy@"             : same thing using unnamed register
                        同上,不过是用匿名寄存器
    u@.              : execute command JUST typed in
                        只执行键入的命令

    ----------------------------------------

    # Get output from other commands (requires external programs)
    # 从其他程序获取输出 (需要外部程序)
    :r!ls.exe        : reads in output of ls
                        读取ls的输出到当前位置
    !!date           : same thing (but replaces/filters current line)
                        读取date的输出 (但是会替换当前行的内容)
                      # 译释:其实你输入了!!后,vim就自动转换到 :.! 等待你继续输入
    # Sorting with external sort
    # 使用外部程序sort进行排序(sort是Unix标准命令,ls,date也是)
    :%!sort -u       : use an external program to filter content
                        使用sort程序排序整个文件(用结果重写文件)
                      # 译释:%表示整个文件的所有行
                      # !sort表示执行外部命令sort
                      # -u是sort的参数,man sort看看,这个参数的意义是合并相同的行
                      # u就是unique,如果两行内容相同,则结果中只保留一行的说
    :'a,'b!sort -u   : use an external program to filter content
                        对mark a 到mark b中间的内容进行排序
    !1} sort -u      : sorts paragraph (note normal mode!!)
                        排序当前段落 (只能在normal模式下使用!!)
                      # 译释:!表示使用filter,1}表示filter的对象是从当前行开始向后
    数一段
                      # 段落指到空行处结束,不包括空行
                      # 其实你一旦输入 !1},vim就自动计算当前段落应该到那一行(eg.+
    5),然后生成
                      # :.,.+5! 等待之后输入sort -u,回车,完成操作
                      # .表示当前行,.+5当然就是当前行向后数5行

    ----------------------------------------

    # Multiple Files Management (Essential)
    # 多文档操作 (基础)
    :bn              : goto next buffer
                        跳转到下一个buffer
    :bp              : goto previous buffer
                        跳转到上一个buffer
    :wn              : save file and move to next (super)
                        存盘当前文件并跳转到下一个
    :wp              : save file and move to previous
                        存盘当前文件并跳转到上一个
    :bd              : remove file from buffer list (super)
                        把这个文件从buffer列表中做掉
    :bun             : Buffer unload (remove window but not from list)
                        卸掉buffer (关闭这个buffer的窗口但是不把它从列表中做掉)
    :badd file.c     : file from buffer list
                        把文件file.c添加到buffer列表
    :b 3             : go to buffer 3
                        跳到第3个buffer
    :b main          : go to buffer with main in name eg main.c (ultra)
                        跳到一个名字中包含main的buffer,例如main.c
    :sav php.html    : Save current file as php.html and "move" to php.html
                        把当前文件存为php.html并打开php.html
    :sav! %<.bak  : Save Current file to alternative extension
                        换一个后缀保存
    :sav! %:r.cfm    : Save Current file to alternative extension

    :e!              : return to unmodified file
                        返回到修改之前的文件(修改之后没有存盘)
    :w c:/aaa/%      : save file elsewhere
                        把文件存到一个地儿
    :e #             : edit alternative file
                        编辑标记为#的buffer(这个buffer必须含有一个可编辑的文件)
                     # 用ls命令就能看到哪一个buffer有#
                      # %a表示当前正在编辑的buffer
                      # u 表示不能编辑或者已经被做掉的buffer
    :rew             : return to beginning of editted files list (:args)
                        回到第一个可编辑的文件
    :brew            : buffer rewind
                        回到第一个buffer
    :sp fred.txt     : open fred.txt into a split
                        在一个水平分割的窗口中打开文件fred.txt # 译注:vs fred.txt可
    以实现垂直分割
    :sball,:sb       : Split all buffers (super)
                        把当前所有含有可编辑文件的buffer显示到一个分割窗口中
    :scrollbind      : in each split window
    :map   <F5> :ls<CR>:e # : Pressing F5 lists all buffer, just type number
                                     在normal模式下按F5键,则会显示所有含有一个
                                     可编辑文件的buffer,然后提示你输入buffer的序号,
                                     输入后回车,则编辑这个buffer
    :set hidden      : Allows to change buffer w/o saving current buffer
                        允许不保存buffer而切换buffer (w/o=without)
    ----------------------------------------
    # Quick jumping between splits
    # 在分割窗口中快速切换
    :map <C-J> <C-W>j<C-W>_
    # 这是一个键盘绑定,把Ctrl-J定义成切换到下一个窗口并最大化
    :map <C-K> <C-W>k<C-W>_
    # 这是一个键盘绑定,把Ctrl-K定义成切换到上一个窗口并最大化

    ----------------------------------------
    # Recording (BEST TIP of ALL)
    # 命令录制 (最佳技巧)
    qq  # record to q
           录制到q
    your complex series of commands  # 输入一系列复杂的指令
    q   # end recording
           再次按q停止录制
    @q  # to execute
           执行q中存储的指令
    @@  # to Repeat
           重复执行
    5@@ # to Repeat 5 times
           重复执行5遍

    # editing a register/recording
    # 编辑寄存器/录制
    "qp            :display contents of register q (normal mode)
                     显示寄存器 q 的内容 (普通模式)
    <ctrl-R>q   :display contents of register q (insert mode)
                    显示寄存器 q 的内容 (插入模式)

    # you can now see recording contents, edit as required
    # 你现在可以看到记录内容,随便编辑
    "qdd           :put changed contacts back into q
    @q             :execute recording/register q
                     执行记录/寄存器 q

    # Operating a Recording on a Visual BLOCK
    # 在可视块中运行记录
    1) define recording/register
    1) 定义记录/寄存器
    qq:s/ to/ from/g^Mq
    2) Define Visual BLOCK
    2) 定义可视块
    V}
    3) hit : and the following appears
    3) 键入 : 将显示下面信息
    :'<,'>
    4)Complete as follows
    4) 完成如下操作
    :'<,'>norm @q
    ----------------------------------------
    # Visual is the newest and usually the BEST editting mode
    # 可视模式是最新也通常是最好的编辑模式
    # Visual basics
    # 可视模式基础
    v              : enter visual mode
                      进入可视模式
    V              : visual mode whole line
                      整行的可视模式
    <C-V>       : enter VISUAL BLOCK mode
                      进入可视块模式
    gv             : reselect last visual area
                      重新选取最新的可视区域
    o              : navigate visual area
                      浏览可视区域
    "*y            : yank visual area into paste buffer
                      复制可视区域到剪贴板
    V%             : visualise what you match
                      ???
    V}J            : Join Visual block (great)
                      连接可视块

    ----------------------------------------

    # Delete first 2 characters of 10 successive lines
    # 删除连续10行中每行的头2个字符
    0<c-v>10j2ld

    ----------------------------------------

    # how to copy a set of columns using VISUAL BLOCK
    # 如何用可视块拷贝几列
    # visual block (AKA columnwise selection) (NOT BY ordinary v command)
    # 可视块(并非通常的 v 命令)
    <C-V> then select "column(s)" with motion commands (win32 <C-Q>)
    <C-V>,然后通过移动命令选择列 (win32 <C-Q>)
    then c,d,y,r etc
    然后执行 c,d,y,r 等命令

    ----------------------------------------
    # _vimrc essentials
    # _vimrc基础
    :set incsearch : jumps to search word as you type (annoying but excellent)
                      实时匹配你输入的内容
    :set wildignore=*.o,*.obj,*.bak,*.exe : tab complete now ignores these
                                             tab键的自动完成现在会忽略这些
    :set shiftwidth=3                     : for shift/tabbing
                                             自动缩进设为4个字符
                                           # 译注:一个tab位通常是8个字符
                                           # 所以,我们还要设定 :set tabstop=4,这
    样,所有的缩进都是4字符了
    :set vb t_vb=".                       : set silent (no beep)
                                             沉默方式(不要叫beep!)
    :set browsedir=buffer                 : Maki GUI File Open use current directory
                                             设置 GUI 版本文件打开时,使用当前路径
    ----------------------------------------
    # launching Win IE
    # 加载 IE 浏览器
    :nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p<CR>
    :nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR>
    # 译释:nmap是做一个normal模式下的键盘绑定
    # 这里绑定了一个逗号命令 ,f
    # :update是写这个文件,与:w不同,它只有当文件被修改了的时候才写
    # :silent别让弹出窗口报告执行结果
    # !...后面就是执行windows命令了。呵呵,去问bill gates什么意思吧。

    ----------------------------------------

    # FTPing from VIM
    # 用 VIM 通过 ftp 编辑文件
    :cmap ,r  :Nread ftp://209.51.134.122/public_html/index.html
    :cmap ,w  :Nwrite ftp://209.51.134.122/public_html/index.html
    gvim ftp://209.51.134.122/public_html/index.html
    # 译注:cmap是命令(command)模式绑定

    ----------------------------------------

    # appending to registers (use CAPITAL)
    # 附加到一个register (用大写的register名字)
    "a5yy   #复制5行到a中
    10j     #下移10行
    "A5yy   #再添加5行到a中

    ----------------------------------------

    [I     : show lines matching word under cursor <cword> (super)
              显示光标处的狭义字可以匹配的行(高级指令)
            # 译注:# 可以全文查找与光标处的狭义字相匹配的字,
            # 这在查找函数原型和实现,或者变量使用的时候很有用

    ----------------------------------------

    # Conventional Shifting/Indenting
    # 常规缩进
    :'a,'b>>   # 把mark a到mark b之间的内容缩进两次

    # visual shifting (builtin-repeat)
    # 在visual模式下缩进 (无限可重复)
    :vnoremap < <gv
    # 译释::vnoremap 重定义了visual模式下 < 符号的含义
    # 把它定义成 <gv
    # 即:先<向外缩进,然后gv重新选择上一次选择了的区域
    # 这样在visual模式下就可以实现连续按<而连续缩进了
    :vnoremap > >gv
    # 同里,内缩

    # Block shifting (magic)
    # 块缩进
     >i{
     >a{
    # also
     >% and <%
    ----------------------------------------
    # Redirection & Paste register *
    # 重定向到剪贴板和从剪贴板粘贴
    :redir @*                    : redirect commands to paste buffer
                                    重定向命令的输出结果(最下方命令行上的结果)
    :redir END                   : end redirect
                                    结束重定向
    :redir >> out.txt            : redirect to a file
                                    重定向到一个文件
    # Working with Paste buffer
    # 操作剪贴板
    "*yy                         : yank to paste
                                    复制到剪贴板中
    "*p                          : insert from paste buffer
                                    从剪贴板中粘贴
    # yank to paste buffer (ex mode)
    # 拷贝到剪贴板 (ex 模式)
    :'a,'by*                     : Yank range into paste
                                    把标记a到标记b见的内容拷贝到剪贴板
    :%y*                         : Yank whole buffer into paste
                                    把整个文件拷贝到剪贴板
    # filter non-printable characters from the paste buffer
    # 从剪贴板上过滤非可打印字符
    # useful when pasting from some gui application
    # 当从一些 GUI 程序粘贴时会有用处
    :nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
    ----------------------------------------
    # Re-Formatting text
    # 重新格式化文本
    gq}                          : Format a paragraph
                                    格式化一个段落
    ggVGgq                       : Reformat entire file
                                    重新格式化整个文件
    Vgq                          : current line
                                    格式化当前行
    # break lines at 70 chars, if possible after a ;
    # 在70列的时候换行
    :s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g
    ----------------------------------------
    # Operate command over multiple files
    # 对多个文档实施命令
    :argdo %s/foo/bar/e          : operate on all files in :args
                                    对所有:args列表中的文档执行命令
    :bufdo %s/foo/bar/e
    :windo %s/foo/bar/e
    :argdo exe '%!sort'|w!       : include an external command
                                    使用外部命令
    :bufdo /foo/
    ----------------------------------------
    # Command line tricks
    # 命令行上的技巧
    gvim -h                    : help
                                  启动帮助
    ls | gvim -                : edit a stream!!
                                  编辑一个数据流
    cat xx | gvim - -c "v/^\d\d\|^[3-9]/d " : filter a stream
    gvim -o file1 file2        : open into a split
                                  以分割窗口打开两个文件

    # execute one command after opening file
    # 指出打开之后执行的命令
    gvim.exe -c "/main" joe.c  : Open joe.c & jump to "main"

    # execute multiple command on a single file
    # 对一个文件执行多个命令
    vim -c "%s/ABC/DEF/ge | update" file1.c

    # execute multiple command on a group of files
    # 对一组文件执行多个命令
    vim -c "argdo %s/ABC/DEF/ge | update" *.c

    # remove blocks of text from a series of files
    # 从一组文件中删除文本块
    vim -c "argdo /begin/+1,/end/-1g/^/d | update" *.c

    # Automate editting of a file (Ex commands in convert.vim)
    # 自动编辑文件 (编辑命令序列Ex commands已经包含在convert.vim中了)
    vim -s "convert.vim" file.c

    #load VIM without .vimrc and plugins (clean VIM)
    # 不要加载.vimrc和任何plugins (启动一个干净的VIM)
    gvim -u NONE -U NONE -N

    # Access paste buffer contents (put in a scrīpt/batch file)
    # 读取剪贴板内容 (放到脚本或批处理文件中)
    gvim -c 'normal ggdG"*p' c:/aaa/xp

    # print paste contents to default printer
    # 把剪贴板内容打印到默认打印机
    gvim -c 's/^/\=@*/|hardcopy!|q!'
    ----------------------------------------
    # GVIM Difference Function (Brilliant)
    gvim -d file1 file2        : vimdiff (compare differences)
                                  vimdiff (比较不同)
    dp                         : "put" difference under cursor to other file
                                  把光标处的不同放到另一个文件
    do                         : "get" difference under cursor from other file
                                  在光标处从另一个文件取得不同
    ----------------------------------------
    # Vim traps
    # Vim陷阱
    In regular expressions you must backslash + (match 1 or more)
    In regular expressions you must backslash | (or)
    In regular expressions you must backslash ( (group)
    In regular expressions you must backslash { (count)
    # 在vim的正则表达式中, + | ( { 前都必须加转义符 \
    /fred\+/                   : matches fred/freddy but not free
                                  匹配fred或freddy但是不匹配free
    /\(fred\)\{2,3}/           : note what you have to break
                                  ???
    ----------------------------------------
    # \v or very magic (usually) reduces backslashing
    # \v ,或叫做very magic (通常都是这么叫)可以取消转义符
    /codes\(\n\|\s\)*where  : normal regexp
                               普通的正则表达式
    /\vcodes(\n|\s)*where   : very magic
    ----------------------------------------
    # pulling objects onto command/search line (SUPER)
    # 把东西送到命令行/搜索行 (SUPER)
    <C-R><C-W> : pull word under the cursor into a command line or search
                        送一个狭义词
    <C-R><C-A> : pull WORD under the cursor into a command line or search
                        送一个广义词
    <C-R>-                  : pull small register (also insert mode)
                                 送一个小型寄存器 (插入模式下也有效)
    <C-R>[0-9a-z]           : pull named registers (also insert mode)
                                  送一个命名寄存器 (插入模式下也有效)
    <C-R>%                  : pull file name (also #) (also insert mode)
                                  送文件名过去 (#也行)

  • VirtualBox-另一个虚拟机软件

    2007-01-17 23:02:43

    VirtualBox-另一个虚拟机软件

    对于 VMWare、Virtual PC 这些虚拟机软件,可能大家都比较熟悉。今天我要介绍的是另一个虚拟机软件——VirtualBox。VirtualBox 是一款功能强大的 x86 虚拟机软件,它不仅具有丰富的特色,而且性能也很优异。更可喜的是,VirtualBox 于数日前走向开源,成为了一个发布在 GPL 许可之下的自由软件。
    大小: 55.01 K
尺寸: 400 x 334
浏览: 0 次
点击打开新窗口浏览全图


    在 VirtualBox 中安装centos

    VirtualBox 可以在 Linux 和 Windows 主机中运行,并支持在其中安装 Windows (NT 4.0、2000、XP、Server 2003、Vista)、DOS/Windows 3.x、Linux (2.4 和 2.6)、OpenBSD 等系列的客户操作系统。

    假如你曾经有用过虚拟机软件的经历的话,相信使用 VirtualBox 不在话下。即便你是一个新手,也没有关系。VirtualBox 提供了详细的文档,可以助你在短期内入门。

    想要试试 VirtualBox?那么下载它吧。

    Download VirtualBox 1.3.2

    真的很好用。而且是开源的。我装了下centos4.4,感觉是目前vmware的最好替代

    摘自:http://linuxtoy.org/archives/virtualbox.html

  • 有趣的英文单词

    2007-01-17 16:13:57

    首先,妙趣横生的发音
    英语中有很多叠声词(组),复合词或词组前后发音相近,读起来朗朗上口,富有音乐感。
    Tit for tat:针锋相对
    Tweedledum and tweedledee:半斤八两
    hum and haw:表示犹豫或支吾的嗯嗯呃呃声
    cling-clang:叮当作响,铿锵声。
    rat-tat, rat-a-rat, rat-tat -tat:(敲门的)砰砰声。
    Flip-flop:啪嗒啪嗒地响(动)
    Zigzag:弯弯曲曲
    Hotch-potch:大杂烩
    Criss-cross:纵横交错
    Helter-skelter:慌慌张张
    Shilly-shally:犹犹豫豫
    Chit-chat:拉呱
    Dillydally:磨磨蹭蹭
    Tittle-tattle:嚼舌头,搬弄是非
    Higgledy-piggledy:乱七八糟
    Walkie-talkie:步话机
    Job-hop:跳槽
    其次,妙趣横生的词形
    有些单词正看、反看都有意思,越看越有意思,越有意思越想看。因为英语单词只能横向变化,没有上下结构, 故叫妙趣"横"生。如:
    live倒过来就是evil。 可见"生活"不能颠倒,颠倒过来就是"罪恶"--俨如警世通言!又,鼠辈造反(猜一英语单词)。谜底是star。因为star从后往前读,正好是rats。英语中有不少单词左右有讲,堪称翻然成趣。
    Are--------- era(时代);bin(贮藏器)----- nib(笔尖);but ------ tub(盆);deer(鹿)----- reed(芦苇); door----- rood(十字架);doom(注定)----- mood(心情);deem(认为)----- meed(适当的报答); dot(点)----- tod(狐);evil(罪恶)------ live(生活);God----- dog;gnat(小烦扰)----- tang(强烈的味道);gulp(吞)-------plug(插座);gut(内容,实质)----- tug(猛拉,苦干);keel(船的龙骨)------leek(韭葱);loop(环)----- pool(水池);loot(赃物)----- tool,meet---- teem(充满,涌现);nip(呷)------ pin(大头针);nod(点头)------ don(大学教师);not----- ton(吨);on---- no;pan(平底锅)------- nap(小睡);part----- trap(陷阱);pets(宠物)------- step;pots(壶)-----stop;put-----tup(公羊);rail(铁轨)------ liar(说谎者);ram(公羊)------ mar(弄糟);raw(生的)------ war;saw(锯)----- was;sloop(小型护航舰)-----pools;smart(机灵的)----- trams(电车);snap(猛咬,争购)----- pans;tap(水龙头)------ pat(轻拍);ten----- net(网);tog(衣服)------ got;tom(雄猫)----- mot(警句);tops(顶)------- spot(点);tun(大酒桶)------ nut(坚果)。
    再者,妙趣横生的含义
    不少单词似是而非,千万不要望文生义,而误入陷阱。如:
    one-two 是"拳击中连击两次",而不是一种"一二"。
    Two-time是"对人不忠",而不是一种"两次"。
    In two twos是"立刻",而不是一种"两两之间"。
    Three-score是"六十",而不是一种"三分"。
    Four o'clock是"紫茉莉或食蜜鸟",而不是"四点"。
    Four Hundred 是"名流、上层",而不是"四百"。
    Five-finger是"贼",类似汉语的"三只手",而不是一种"五指"。
    At sixes and sevens是"乱七八糟",而 和"六"无关。
    Seven-Hill City是"罗马",而不是一种"七山市"。
    Eight-ball是"老实人",这里的"八" 和"发"无关。
    To the tens是"打扮得极为华丽",而 "数到十"。
    a white day是"良晨吉日",而不是一种"大白天"。
    a white elephant是"沉重的负担",而不是一种"白象"。
    Blue film是"黄色电影",而和 "蓝色" 无关。
    Yellow book是"法国政府或议会的报告书",而不是一种"黄色书刊"。
    Green-eyed是"红眼病",而不是"绿眼病"。
    Green hand是"生手",而不是"绿手"。
    Green horn是"新移民",而和 "牛羊的角" 无关。
    White lie是"善意的谎言",而和 "白色" 无关。
    Green back 是"美圆",而不是"绿毛龟"。
    Yellow back 是"法国廉价小说",而不是"黄背"。
    Green line是"轰炸线",而不是"绿线"。
    Green room是"演员休息室",而不是"绿色房间"。
    White room是"绝尘室",而不是"白色房间"。
    Green house是"温室",而不是"绿色的屋子"。
    White house是"白宫",而不是普通的"白房子"。
    White smith是"银匠,锡匠",而不是"白人史密斯"。
    Black smith是"铁匠",而不是"黑人史密斯"。
    Chocolate drop是蔑称的"黑人",而不是"巧克力滴"。
    Black tea是"红茶",而不是"黑茶"。
    Brown sugar是"红糖",而不是"棕糖"。
    Green power是"金钱的力量",而不是"绿色国家"。
    firefly是"萤火虫",而不是一种"苍蝇"。
    dragonfly是"蜻蜓",而不是一种"飞龙"。
    Lady bird是"瓢虫",而不是一种"太太鸟"。
    Dragon's teeth是"相互争斗的根源",而不是一种"龙齿"。
    Talk fish是"吹牛",而不是"谈马"。
    Morning glory是"牵牛花",而不是"早晨的光荣"。
    Lead pencil是"铅笔",它是"石墨"做的,而和 "铅(lead)" 无关。
    Silk worm是"蚕",既不是"寄生虫",也不是"可怜虫"。
    Cat gut是"羊肠线",而和 "猫" 无关。
    Barber's cat是"面黄肌瘦的人",而不是"理发师的猫"。
    Cat's eye 是"反光路丁",而不是门镜"猫眼"。
    Cats and dogs 是"杂物,价值低的股票",而不是门上的"猫和狗"或"狗事猫事"。
    Rain cats and dogs是"大雨倾盆",而不是门上的"下猫和狗"。
    Prairie dog是"草原鼠",而和 "狗" 无关。
    Lucky dog是"幸运儿",而不是"幸运狗"。
    You dirty dog. 是"你这卑鄙的家伙",而不是"脏狗"。
    Eat dirt是"忍辱",而不是"吃土"。
    Touch-me-not是"凤仙花",而不是"别碰我"。
    forget-me-not是"勿忘我",是一种花而不是其它。
    Douglas fir tree是一种"松树",而和 "枞树" 无关。
    Peanut是"花生",而不是"豆类"。
    Shortbread是"酥饼",而不是一种"面包"。
    Shooting star是"陨石",而不是什么"星"。
    Friendly camera是"傻瓜照相机",而不是什么"友好摄影机"。
    Funny bone是"麻骨",指神经,而不是一种"骨"。
    Banana tree说是"香蕉树",属"草本植物", 而和 "树" 无关。。
    Jackrabbit是一种"野兔"(hare),而不是 "家兔"(rabbit)。
    Koala bear"考拉熊",不是一种"熊",而是一种有袋动物。
    Sweetbread是"胰脏",而不是"面包"。
    Writing brush是"毛笔",而不是一种"刷子"。
    Small potato是"小人物",而不是一种"小土豆"。
    Big potato是"大人物",而不是一种"大土豆"。
    Couch potato是"电视迷",而不是一种"沙发土豆"。
    The berries是"绝妙的人、事",而不是"草莓、西红柿"。
    The Fourth是七月四号的"美国独立纪念日",而不是简单的"第四"。
    the Four Tigers of Asia是"亚洲四小龙",而不是"亚洲四小虎"。
    Gang of four在英国人嘴里是指"工党的四个头面人物",而不是我们认为的"四人帮"。
    pull one's leg是"愚弄某人",而不是"拉后腿"。
    cast pearls before the swine是"对牛弹琴",而不是"给猪扔珍珠"。
    live a dog's life是"过着牛马不如的生活",而不是"过狗生活"。
    dumb as an oyster是"守口如瓶",而不是"不能说话的牡蛎"。
    Send in someone's jacket是"辞职",而不是"送去某人的茄克"。
    Put down your jacket是"别激动",而不是"领取你的茄克"。
    Jack leg是"外行",而不是"杰克的腿"。
    Jack-of-all-trades是"多面手",而不是"各行的杰克"。
    Don't put horse before the cart. 是"不要本末倒置",而不是"别把马车套到马前面"。
    Don't teach fish to swim. 是"切勿班门弄斧",而不是"不要教鱼游泳"。
    India ink是"墨汁",来自中国,而不是"印度"。
    Indian shot是"美人蕉",而不是"印度的炮弹"。
    English horn是"法国双簧管",它既不是一种"号",也不来自英国。
    Guinea pig是"天竺鼠",而不是一种"猪"。
    American Plan是"食宿一费制",而不是一种"美洲计划"。
    American beauty是"月季",而不是一种"美国美人"。
    Dutch act是"自杀",而不是"荷兰人的行动"。
    Chinaberry是"楝树",而不是"中国莓"。
    China grass是"苎麻",而不是"中国草"。
    Dutch door是"杂志中的散页广告",而不是一种"荷兰门"。
    Dutch uncle是"唠唠叨叨的人",而不是一种"荷兰大叔"。
    Dutch wife是"竹、藤睡具",而不是一种"荷兰老婆"。
    Go Dutch是"各人自己付钱",而不是一种"去荷兰"。
    Take French leave是"不告而别",而不是一种"请法国假"。
    French letter是"避孕套",而不是"法国信"。
    Russia dressing是"蛋黄酱",而不是"俄罗斯服装"。
    A Greek gift是"害人的礼物",而不是"希腊的赠品"。
    Italian iron是"圆筒形熨斗",而不是"意大利铁"。
    Spanish athlete是"胡说的人",而不是"西班牙运动员"。
    最后,妙趣横生的大小写
    有些单词的词首字母仅仅作一下大小写方面的改变,则差之毫厘,谬以千里。
    大写China 指"中国";小写china指"瓷器"。
    大写Japan指"日本"; 小写japan指"日本式漆器"。
    大写Jordan指"约旦"; 小写jordan指"尿壶"。
    大写John指"约翰"; 小写john指"厕所"。
    大写Russia 指"俄罗斯";小写russia指"俄罗斯皮革"。
    大写Turkey 指"土耳其";小写turkey指"火鸡"。
    大写Shanghai指"上海"; 小写shanghai指"拐骗"。
  • Software war Funny Picture

    2007-01-16 19:23:50

    大小: 73.55 K
尺寸: 400 x 300
浏览: 0 次
点击打开新窗口浏览全图
  • 网络常用英文缩写和表情

    2007-01-16 12:22:09

    Abbreviations
    AFAIK as far as I know
    BTW by the way
    FYI for your information
    HTH hope that helps
    IMO in my opinion
    IOW in other words
    TAFN that's all for now
    TIA thanks in advance

    Smileys
    :-)
    I'm happy
    :-(
    I'm angry/unhappy
    >:-(
    I'm very angry/unhappy
    :-O
    I'm very surprised/shouting loudly
    :-@
    I'm screaming
    :-*
    I'm sending you a kiss
    :-{)
    I have a moustache
    8-)
    I wear glasses

411/3123>

数据统计

  • 访问量: 48494
  • 日志数: 42
  • 图片数: 3
  • 文件数: 1
  • 书签数: 13
  • 建立时间: 2007-01-05
  • 更新时间: 2007-03-03

RSS订阅

Open Toolbar