发布新日志

  • linux命令:VI 常用命令和快捷键

    2010-03-19 15:35:26

    VI 常用命令和快捷键

    语法]:vi [-wn] [-R] 文件…

    [说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器,可以在vi 中使用 ex,ed的全部命令,vi选项中 -wn 指将编辑窗口大小置为n行,-R 为将编辑的文件置为只读模式, vi 工作模式分为命令模式和输入模式,一般情况下在命令模式下,可敲入vi命令,进入输入模式下时可以编辑要编辑的文本,命令 a A i I o O c C s S R 可进入输入模式,在输入模式下按 ESC 键可推出输入模式,回到命令模式,在命令模式中敲入: 命令,则可进入ex方式,在屏幕底部出现提示符 : ,此时可使用任意ex命令,屏幕底行也用来作/ ? ! 命令的提示行,大多数命令可以在其前面加数字,表示命令执行的重复次数,下面简单介绍一下vi 的命令集:

    ^ 表示(CTRL)键
    ^B 退回前一页,前面加数字表示重复次数,每次换页时保留上一页的两行
    ^D 在命令模式下,表示下滚屏幕的一半,在输入模式下,表示回退至左边的自动缩进处
    ^E 显示屏幕底线之下的一行
    ^F 前进一页,前面加数字表示重复次数,每次换页时保留上一页的两行
    ^G 显示当前文件名,当前行号和文件总行数,并用百分号当前行在整个文件中的位置
    ^H(退格) 在命令模式下,光标左移一格;在输入模式下,删去前面的字符
    ^I(TAB) 在输入模式下,产生一串空格
    ^J(LF) 光标下移一行
    ^L 刷新屏幕,即将屏幕重新显示
    ^M(回车) 在命令模式下,光标移动至下行开头;在输入模式下,开辟一新行
    ^N 光标下移一行
    ^P 光标上移一行
    ^Q 在输入模式下,将其后的非打印字符作为正文插入
    ^R 刷新屏幕
    ^U 屏幕上滚一半,前面加数字时表示上滚的行数,此数字对以后的^D ^U 命令有效
    ^V 在输入模式下,将其后的非打印字符作为正文插入
    ^W 在输入模式下,使光标回退一个字
    ^Y 显示屏幕底线之上的一行
    ^Z 暂停编辑,退回上层Shell
    ^[(ESC) 退出输入模式,回到命令模式

    ! 暂时退出编辑,执行Shell命令
    (双引号) 用于标志有名缓冲区,编号缓冲区1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定义的正文
    $ 将光标移动到当前行尾,前加数字则表示前移行数,如2$表示移动到下一行行尾
    % 将光标移动到配对的小括号()或大括号{}上去
    ( 退回句子开头
    ) 前移到句子开头
    - 退到上一行第一个非空格字符
    . 重复上一次改变缓冲区内容的命令
    / 模式 向前搜索模式,将光标移动到模式出现处,模式是一个正规表达式,(参看 grep)
    : 在屏幕底部提示:,其后可使用ex命令
    ? 功能同 / ,但方向是向前查找
    [[ 光标回退至前一节分界处
    \ 转意符
    ]] 光标前移至节分界处
    ^(不是CTRL) 光标移至当前行第一个非空字符上
    ‘ 连续两个'’表示将光标移至其移动前的位置,’后跟字母表示光标字母标记的行首(参看 m 命令)

    A 在行尾插入正文,进入输入模式
    B 光标回退一个字
    C 替换光标后的内容
    D 删除光标后的内容
    E 光标前移到字尾
    F 字符 在当前行向左查找指定字符
    G 光标移动到其前面数字指定的行,若未指定则移动到最后一行
    H 光标移动到屏幕顶行,若前面有数字,则移动到屏幕上该数字指定的行
    I 在行开头插入正文
    J 连接两行,若前面有数字则连接数字指定的行
    L 光标移动到屏幕底行,若前面有数字,则移动到屏幕底线往上数该数字指定的行
    M 光标移动到屏幕中线
    N 使用模式查找/或?时,重复找下一个匹配的模式,但方向与上次相反,其功能同 n ,但方向相反
    O 在当前行上开辟一新行
    P 将上次被删除的正文插入光标前面,可在其前面加缓冲区编号,编号1-9用于保存被删去的正文,字母名缓冲区a-z供用户存放自定义的正文
    Q 从vi 推出进入ex命令状态
    R 替换字符串
    S 替换整行
    T 字符 向左查找字符
    U 将当前行恢复至第一次修改前的状态
    W 光标移至下一个字首
    X 删除光标前的字符
    Y 将当前行存入无名缓冲区,前面加数字表示存入的行数,也可用有名缓冲区来保存,以后可用命令p或P将其取出
    ZZ 存盘退出vi

    a 光标后插入正文
    b 光标回退至上一个字首
    cw 替换当前字
    c) 替换当前句子
    dw 删除一个字
    dd 删除一行
    e 光标移到下一个字末
    f 字符 在当前行向前查找字符
    h 光标左移一格
    i 在光标前插入正文
    j 光标下移一行
    k 光标上移一行
    l 光标右移一格
    m 字母 用字母标记当前行,以后可用 ‘字母使光标移动到当前行,(参看’命令)
    n 重复上次 / 或 ? 命令
    o 在当前行下开辟一新行
    p 将用户缓冲区内容放到光标位置(参看P命令)
    r 替换当前字符
    s 用一串字符替换当前字符
    t 字符 光标移动至字符前
    u 取消上次操作
    w 光标移至下一字首
    x 删除当前字符
    yw 将当前字存入无名缓冲区,前面可加x,表示存入名字为x的有名缓冲区(x为a-z),也可加数字表示存入的字数,以后可用P或p命令取出
    yy 将当前行存入无名缓冲区,用法参看yw
    { 光标移动至前一段开头
    | 光标移至行首,若前面加数字,则移到数字指定行的行首
    } 光标移至下一段开头

    在:提示符下,常用命令如下:
    :w 当前文件存盘
    :w! 强制存盘
    :w 文件 将内容写入指定文件
    :w! 文件 强制写入指定文件
    :x,y w 文件 将 x至 y 行写入指定文件中
    :r 文件 将文件读到光标位置
    :r ! 命令 将系统命令的输出读到光标位置
    :q 退出编辑
    :q! 强制退出
    :x 与命令ZZ相同
    :e 文件名 编辑另一文件
    :e ! 重新编辑文件,放弃任何改变
    :sh 执行sh,结束后回到编辑
    :! 命令 执行命令后回到编辑
    :n 编辑下一文件
    :n 文件表 重新定义待编辑文件表

    :set 设置 vi 的选项,例如 set nu 表示每行前显示行号,在选项前加no则表示清除该选项,例如 set nonu 表示每行前不显示行号,下面是一些常用的选项:
    ai 自动缩进
    aw 编辑下一文件前自动存盘
    ic 查找字符串时不区分大小写
    nu 每行前显示行号
    sm 输入)及}时显示与之配对的( 或 {
    slow 插入时延迟屏幕刷新
    ws 使查找能绕过文件尾从头进行
    wa 写文件之前不作对文件的检查
     
     
     
    :s/old/new用new替换行中首次出现的old
    :s/old/new/g 用new替换行中所有出现的old
    :#,# s/old/new/g用new替换从第#行到第#行中出现的old
    :% s/old/new/g用new替换整篇中出现的old
    如果替换的范围较大时,在所有的命令尾加一个c命令,强制每个替换需要用户进行确认,例如:s/old/new/c 或s/old/new/gc


    u 取消操作

    i插入命令 a附加命令 o打开命令 c修改命令 r取代命令 s替换命令 Esc退出命令

    G文件尾行 1G文件首行   #G 文件的#行

    :set nu :set nonu   显示行号 不显示行号

    Vi 是一个历史悠久且功能强大的 UNIX 文书编辑器。在古早的年代,许多键盘都只有一些基本按键,连上下左右键都没有,所以 vi 大多数的功能都必须使用一些特殊的按键。

    Vi 在使用时可以分成二种模式,一种是「编辑模式」,另一种则为「命令模式」。在编辑模式时,我们可以使用上下左右键来移动光标并编辑输入我们所要编辑的文字内容。而命令模式时,我们可以进行档案操作 (开文件、存盘等)、搜寻等功能。使用 vi 时,我们会很常按 <Esc> 键,<Esc> 键可以让我们离开编辑模式并进入命令模式。请执行 vi example.txt 来编辑 example.txt 这个档案,一进入 vi 时,预设会处于命令模式,我们必需先输入 "o"、"i"、或"a"才能进入编辑模式。

    以下即为进入编辑模式的指令:

    按键 意义
    i Insert (插入),在目前光标前开始输入。
    a Append (附加),在目前光标后开始输入。
    o 在光标下方新增一空白行并开始编辑。
    O 在光标上方新增一空白行并开始编辑。

    如果您输入错误,您无法使用 <Delete> 或 <Backspace> 来删除,我们必须使用 vi 的其它命令来进行。请先按 <Esc> 来进入命令模式,接着您就可以使用下列指令来进行进阶编辑:

    按键 意义
    x 删除光标所在位置的字符。
    dw 删除游标所在到字尾,即删除一个字。
    dd 删除游标所在一整行。
    d + 数字 + <Enter> 删除从光标所在位置到其下方 n 行。例如输入 d5 <Enter>,将删除光标所在位置起 6 行。
    yw 复制光标开始到字尾。
    yy 复制游标所在一整行。
    y + 数字 + <Enter> 复制从光标所在位置到其下方 n 行。例如输入 y4 <Enter>,将复制光标所在位置起 5 行。
    p 贴上上一次复制的内容。
    :w <Enter> 存档。
    :w 文件名称 <Enter> 另存新檔。您必输在 w 后输入新的档名。
    :q <Enter> 离开 vi。如果档案有修改过会无法离开。
    :wq <Enter> 存档并离开。
    :q! <Enter> 不存档并离开。

    接下来我们说明一下如何在档案中穿梭移动:

    按键 意义
    h 游标向左移。
    j 游标向下移。
    k 游标向上移。
    l 游标向右移。
    ^ 跳到行首。
    $ 跳到行尾。
    w 游标跳到下个字的开头。
    e 游标跳到下个字的结尾。
    b 游标跳到上个字的开头
    <Ctrl> + d 光标往下移动半个屏幕。
    <Ctrl> + u 光标往上移动半个屏幕。
    <Ctrl> + f 光标往上移动一个屏幕。
    <Ctrl> + b 光标往下移动一个屏幕。
    :数字 <Enter> 跳到 n 行,例如输入 :100 即可将光标移到第 100 行。
    /欲搜寻的字符串 <Enter> 输入 / 后,您可以在 / 后输入所要搜寻的字符串,如果要找下一个,则直接按 / <Enter> 即可。

    只要您熟悉了上列指令,您大概就可以很轻松的使用 vi 了。Vi 还有许多功能,你可以 man vi 来获得更多信息。

     

    进入vi的命令

    vi filename :打开或新建文件,并将光标置于第一行首
    vi +n filename :打开文件,并将光标置于第n行首
    vi + filename :打开文件,并将光标置于最后一行首
    vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
    vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
    vi filename….filename :打开多个文件,依次进行编辑

    移动光标类命令

    h :光标左移一个字符
    l :光标右移一个字符
    space:光标右移一个字符
    Backspace:光标左移一个字符
    k或Ctrl+p:光标上移一行
    j或Ctrl+n :光标下移一行
    Enter :光标下移一行
    w或W :光标右移一个字至字首
    b或B :光标左移一个字至字首
    e或E :光标右移一个字至字尾
    ) :光标移至句尾
    ( :光标移至句首
    }:光标移至段落开头
    {:光标移至段落结尾
    nG:光标移至第n行首
    n+:光标下移n行
    n-:光标上移n行
    n$:光标移至第n行尾
    H :光标移至屏幕顶行
    M :光标移至屏幕中间行
    L :光标移至屏幕最后行
    0:(注意是数字零)光标移至当前行首
    $:光标移至当前行尾 屏幕翻滚类命令

    Ctrl+u:向文件首翻半屏
    Ctrl+d:向文件尾翻半屏
    Ctrl+f:向文件尾翻一屏
    Ctrl+b;向文件首翻一屏

    nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

    插入文本类命令

    i :在光标前
    I :在当前行首
    a:光标后
    A:在当前行尾
    o:在当前行之下新开一行
    O:在当前行之上新开一行
    r:替换当前字符
    R:替换当前字符及其后的字符,直至按ESC键
    s:从当前光标位置处开始,以输入的文本替代指定数目的字符
    S:删除指定数目的行,并以所输入文本代替之

    ncw或nCW:修改指定数目的字
    nCC:修改指定数目的行 删除命令
    ndw或ndW:删除光标处开始及其后的n-1个字
    do:删至行首
    d$:删至行尾
    ndd:删除当前行及其后n-1行
    x或X:删除一个字符,x删除光标后的,而X删除光标前的

    Ctrl+u:删除输入方式下所输入的文本 搜索及替换命令
    /pattern:从光标开始处向文件尾搜索pattern
    ?pattern:从光标开始处向文件首搜索
    pattern n:在同一方向重复上一次搜索命令
    N:在反方向上重复上一次搜索命令

    :s/p1/p2/g将当前行中所有p1均用p2替代
    :n1,n2s/p1/p2/g将第n1至n2行中所有p1均用p2替代
    :g/p1/s//p2/g将文件中所有p1均用p2替换 选项设置

    all:列出所有选项设置情况
    term:设置终端类型
    ignorance:在搜索中忽略大小写
    list:显示制表位(Ctrl+I)和行尾标志($)
    number:显示行号
    report:显示由面向行的命令修改过的数目
    terse:显示简短的警告信息
    warn:在转到别的文件时若没保存当前文件则显示NO write信息
    nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
    mesg:允许vi显示其他用户用write写到自己终端上的信息 最后行方式命令

    :n1,n2 co n3 将n1行到n2行之间的内容拷贝到第n3行下
    :n1,n2 m n3 将n1行到n2行之间的内容移至到第n3行下
    :n1,n2 d 将n1行到n2行之间的内容删除

    :w 保存当前文件
    :e filename打开文件filename进行编辑
    :x保存当前文件并退出
    :q退出vi
    :q!不保存文件并退出vi
    :!command执行shell命令command
    :n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
    :r!command:将命令command的输出结果放到当前行

    寄存器操作

    “?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
    “?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
    “?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
    “?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字 ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

    set命令

    显示行号 :set number
    将文件设为只读    :set readonly
    使vi在“:n”和“:!”命令之前都自动保存文件 :set autowrite
    显示用户处在什么模式下 :set showmode
    :set noshowmode就是关闭此显示。

    vi环境变量还有很多。了解它们,将给用户使用vi带来更多方便。用户可以通过vi的联机帮助查到对应的环境变量的详细作用。

    vi 技巧

    1)用指定快捷键如ctrl+j输入#注释符
    在":"提示符下,使用定义快捷键的命令map,然后同时按下ctrl+v,然后再按下ctrl+j,再输入空格,再输入要定义的命令,命令是按"i"键后输入"#",再输入"esc"键. :map ^B i#<ESC>

    2)给文件加密
    在命令行状态:下,执行命令X,然后输入密码即可,ps:一般脚本加密码后无法自动执行了

    ++在vi中搜索了一个单词,该单词以高亮显示,看起来很不舒服,怎么能将它去掉
    在vi的命令模式下输入:nohlsearch就可以了。另外可以在~/.vimrc中写上下面的语句就会有高亮显示:set hlsearch
    加上下面的语句就不会有高亮显示:set nohlsearch

     

    vi其它技巧整理:

    1、交换两个字符位置xp;
             上下两行调换ddp;
             上下两行合并 J;
             从当前位置复制到行尾y$
             如果要粘贴到其他地方 p 就可以了
    删除所有行 dG
    从当前位置删除到行尾d$        

    2、:X
    保存后就加密了
    :X
    然后系统会提示输入密码
    输入密码后存盘退出

    下次编辑时请使用
    vi -x filename
    系统会提示你输入密码,呵呵
    例:以HP-UX为例
    a、加密
        vi file
        :X
        (Are you sure?(y/n)[n]:)回答y
        输入密码回车以后再保存,就加密成功了
    b、解密
        vi -C file 或者 vi -x file
        在 Key: 后面输入密码进入file
        :X
        (Are you sure?(y/n)[n]:)回答y
        直接回车以后再用 wq 或者 wq! 保存,就把file解密成功了
    顺便提一下:加密后的脚本不能被解释执行!
    c、:X(uppcase X)
     key:……
    后用wq!存盘,不能用:x,否则加密失效
     打开时:
      vi -x file
       key: …..

    3、在命令状态下,nyy表示拷贝从光标行起的下n行内容,p表示paste,粘贴下来在光标处

    4、单个字符替换用r;               
             覆盖多个字符用R;
             用多个字符替换一个字符用s;
             整行替换用S;
    :%s/old_word/new_word/g;
    这个指令是于在整个文件中替换特定字符串 ;

    5、H 跳到第一行
             M 跳到中间一行
             L 跳到最后一行
    将光标移到第n行,按下 mk
    将光标移到第m行,按下 "ay'k
    即将第n到m的行存到a寄存器,以此类推,b,c……..寄存器等
    想粘贴到某处,直接将光标移到某地,按下 ‘ap 即可

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

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

    :set number 加行号!

    :g/$/s// ABC/g
    :g/^/s//def /g
    在文本每行的头和尾添加字符串.

    8、替换操作
             s 将当前字符替换为一个或多个字符
             S 将当前行替换为一个或多个字符
             5 s 将从当前字符开始的5个字符替换为一个或多个字符
    注:vi替换使用规则:
    :g/s1/s/s2/s3/g
    第一个g表示对每一个包括s1的行都进行替换,第二个g表示对每一行包括s1的行所有的s2都用s3替换
    s表示替换,s2是要被替换的字符串,他可以和s1相同(如果相同的话用//代替),s3是替换字符串

    9、移动
    fx
    往右移动到 x 字符上–〉fx
    往左移动到 x 字符上–〉Fx
    往右移动到 x 字符前–〉tx
    往左移动到 x 字符后–〉Tx
    (注意:以上四个命令中,其中x是键入的字符)
             ;–>分号,配合 f 和 t 使用,重复一次
             ,–>逗号,配合 f 和 t 使用,反方向重复一次

    10、
    标记文本
      mchar   用字母char标记当前光标的位置
      `char   移至char所标记处
      'char   移至char标记所在行的开头处
      "     移至当前行上一次所在位置(在光标移动之后)――一个双引号
      ''    移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号
    ctrl+f向下翻页,ctrl+b向上翻页(对于telnet上去的时候比较有用)
    shift+4到本行末尾,shift+6到本行开头

    11、追加到缓冲区
    对于已经有内容的缓冲区,可以继续追加内容在其后面,例如:
    "Ad4w       删除光标后4个字,并附加到缓冲区a
    "Ay)        取样从光标到文件尾的内容,并附加到缓冲区a
    "K3yy       取样从光标所在行起的3行内容,并附加到缓冲区k

    注意:在追加缓冲区的命令中,原缓冲区的名字一定要大写,才能将内容追加进去,否则是覆盖原缓冲区的内容。追加内容在原缓冲区末尾另起一行。

    12、在:命令行模式下,首先可以确定命令的范围
    .表示当前行;数字表示行号,如1表示第一行,2表示第二行;$表示最后一行
    范围用,分隔
    然后用命令
    d表示删除,y表示复制……大家都知道的
    最后说一句,%表示全文
    :%d
    是删除全文

    13、恢复前几次操作应用什么命令呀? :em52:

    14、:n,n1 d
    n和n1都是行数, d是删除这些行 .表示当前的行。
    : n
    n是行数,直接转到n行。
    : r 文件名
    把文件添加到当前的文件中
    :n,n1 w 文件名
    把从n行到n1行写道另外一个文件中

    15、查找:
    在一个单词上用*,就向下查找此单词,#是向上
    用/\<hello\>查找hello,就不会查找到hello_world(用此替换也很好用)

    替换:
    如有一文件,内容为:
    aa
    bb
    cc
    dd
    用:%s/.*/printf("& is :%d\\n",&)/
    文件内容为变为:
    printf("aa is :%d\n",aa)
    printf("bb is :%d\n",bb)
    printf("cc is :%d\n",cc)
    printf("dd is :%d\n",dd)
    &为查找到的内容
    用:~为重复上一次替换

    用系统命令编辑:
    如有一文件,内容为:
    333
    222
    334
    444
    111
    553
    554
    233
    运行命令:%!sort 文件内容为:
    111
    222
    233
    333
    334
    444
    553
    554
    用此方法可以使用许多系统命令进行编辑,大家可以灵活运用

    其他特殊用法:
    用q: 看一看有什么用? 可以编辑你用过的命令
    程序中在一个调用函数(如:printf)上用K,可以直接调出printf的帮助

    这些是我比较常用的,并且我觉的很有用的命令,敬请指教。

    16、、:n1,n2w filename (把行N1-N2之间内容写入新文件FILENAME)
    :.=(显示光标所在行的行号)
    u(恢复上一次的操作)
    :!(shell-command 执行SHELL命令的操作)
    :n (直接把光标定义到N行)
    :line1,line2mline3: 将line1–line2之间的内容移到line3下 相当于word的剪贴
    :line1,line2tline3:将line1–line2之间的内容copyline3下,相当于word的粘贴 

    17、由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态
    :ab string strings
    例如 ":ab usa United States of America" ,
    当你在文件里插入 usa 时
    United States of America 就蹦出来了
    :map keys new_seq
    定义你当前 键盘命令
    :set [all]
    vi or ex   的编辑状态
    如 显示每行 :set nu

    18、
    3、把文件内容反转:g/^/m0/   ——〉这个m0怎么解析 呢 ?

    valentine 解释:
    xp和ddp 应该理解为删除一个字符(x)和删除一行(dd),然后在p(paste),这样便不需记新命令了.
    把文件内容反转 (按行反转)
    :g/^/m0/ 应该是 :g/^/m0 无最后的/
    m–>move
    0–>line No 1
    试想,从第1行开始,每一行依次放在文件的开头处,会有什么结果???

    ##一些环境配置

    set nocp
    该命令指定让 VIM 工作在不兼容模式下, 如果使用":set cp"命令打开了兼容模式开关的话, VIM 将尽可能地模仿 vi 的操作模式.推荐大家使用VIM 的不兼容模式, 可以在你的 .vimrc 中的第一行写上: "set nocp"

    set ru
    该命令打开 VIM 的状态栏标尺, 能即时显示当前光标所在位置在文件中的行号、列号, 以及对应的整个文件的百分比

    set hls
    搜索时高亮显示被找到的文本

    set is
    搜索时在未完全输入完毕要检索的文本时就开始检索。

    syntax on
    打开关键字上色

    set encoding=cp936
    设置当前字符编码为简体中文。 这里还有一段能够自动判断文件的 encoding,
    自动选择合适的编码的 .vimrc 代码, 感兴趣的话可以放到自己的配置文件中使用:
    " Encoding settings
    if has("multi_byte")
         " Set fileencoding priority
        if getfsize(expand("%")) > 0
            set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
        else
            set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
        endif

         " CJK environment detection and corresponding setting
        if v:lang =~ "^zh_CN"
             " Use cp936 to support GBK, euc-cn == gb2312
            set encoding=cp936
            set termencoding=cp936
            set fileencoding=cp936
        elseif v:lang =~ "^zh_TW"
             " cp950, big5 or euc-tw
             " Are they equal to each other?
            set encoding=big5
            set termencoding=big5
            set fileencoding=big5
        elseif v:lang =~ "^ko"
             " Copied from someone's dotfile, untested
            set encoding=euc-kr
            set termencoding=euc-kr
            set fileencoding=euc-kr
        elseif v:lang =~ "^ja_JP"
             " Copied from someone's dotfile, unteste
            set encoding=euc-jp
            set termencoding=euc-jp
            set fileencoding=euc-jp
        endif
         " Detect UTF-8 locale, and replace CJK setting if needed
        if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
            set encoding=utf-8
            set termencoding=utf-8
            set fileencoding=utf-8
        endif
    else
        echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
    endif

    set sw=4
    自动缩进的时候, 缩进尺寸为 4 个空格.

    set ts=4
    Tab 宽度为 4 个字符。

    set et
    编辑时将所有 Tab 替换为空格。

    set sm
    显示括号配对情况。 打开这个选项后, 当输入后括号 (包括小括号、中括号、大括号)
    的时候, 光标会跳回前括号片刻, 然后跳回来, 以此显示括号的配对情况。

  • 合法邮箱测试用例(为了日后自己用方便就放空间里了)

    2010-03-19 15:32:48

     

    先讲创建邮箱的规则
    要判定邮箱地址,那我们必须先设定我们邮箱命名的规则
    这里我们以Gmail为例,创建邮箱时候只写用户名,后缀会直接加上@gmail.com

    only letters (a-z), numbers (0-9), and periods (.)  is allowed,
    the first character of your username must be an ascii letter (a-z) or number (0-9)
    username must be between 6 and 30 characters long
    无效等价类如下
    (1)邮箱名组成有"a-z","0-9", ".'以外的字符   eg.#!12#,ewewe
    (2)邮箱名长度 小于6,大于30个字符   eg. werw, wew...
    (3)邮箱名以以"."号开始    eg. .test

    ---------------
    我们的应用程序填写表单时判定邮箱是否为有效邮箱,一般判定规则为
    (1)@(2).(3)

    (1)为任意字符串,长度5~100 
            (邮箱名没有太严格的限制,比如说一般不会以"_"做开始符,结束符;有的邮箱还不能用特殊符号等等。是因为各种邮箱都有不同的命名规则,所以我们不做限制)
    (2)为任意字符串,长度1~30
    (3)为任意字符串,长度2~67
            [(2),(3)就是域名,其实域名是有要求的,可以看看这里http://www.39idc.com/help/hlp_dtl.asp?nid=10000022
            国际域名可使用英文26个字母,10个阿拉伯数字以及横杠("-"),横杠不能作为开始符和结束符,这里并不做太多限制,太多了...]
    (4)必须要有@符号
    (5)必须要有.
    (6)@后面没有以*.*结束(*为任意字符串)
    (7)域名不能使用"_"作为了开始符,结束符

    无效等价类:
    不符合(1)/(2)/(3)/(4)/(5)/(6)/(7)
    不符合(1)(2)/(1)(3)/(1)(4)/(1)(5)/(1)(6)/(1)(7)
    不符合(2)(3)/(2)(4)/(2)(5)/(2)(6)/(2)(7)
    。。。。 以上各个任意组合, eg. 就没写了,太多了
    所以说繁琐的测试工作我们需要工具来做....


    --------------------------------------------------------
    邮箱文本框测试用例
    1) 有@和.符号
    1。 @和.之间没有字符串
    2。 字符串的第一位是@或.
    3。 字符串的最后一位是@或.
    4。 有@和.符号,并有特殊字符
    2) 没有@和.符号
    3) @/.符号中只有一个
    4) 有@@符号重复
    5) 有..符号重复

  • Linux命令:输入文件的前几个字母就可以打出文件名的快捷键

    2010-03-19 15:23:41

    一些文件名很长的文件在手动输入的时候很麻烦,可以用Tab键来节省输入时间

    如: cd apache-tomcat-6.0.24(跳转到apache-tomcat-6.0.24目录)可以输入 cd ap+Tap键

  • Oracle解锁

    2010-03-19 15:21:04

     

    1.查找被锁住进程(直接输入下面语句执行就好,不需要修改)
    select A.sid, b.serial#,
     decode(A.type,
        'MR', 'Media Recovery',
        'RT','Redo Thread',
        'UN','User Name',
        'TX', 'Transaction',
        'TM', 'DML',
        'UL', 'PL/SQL User Lock',
        'DX', 'Distributed Xaction',
        'CF', 'Control File',
        'IS', 'Instance State', 
        'FS', 'File Set',
        'IR', 'Instance Recovery',
        'ST', 'Disk Space Transaction',
        'TS', 'Temp Segment',
        'IV', 'Library Cache Invalida-tion',
        'LS', 'Log Start or Switch',
        'RW', 'Row Wait',
        'SQ', 'Sequence Number',
        'TE', 'Extend Table',
        'TT', 'Temp Table',
        'Unknown') LockType,
     c.object_name,
     ---b.username,
     ---b.osuser,
     decode(a.lmode,   0, 'None',
                1, 'Null',
                2, 'Row-S',
                3, 'Row-X',
                4, 'Share',
                5, 'S/Row-X',
                6, 'Exclusive', 'Unknown') LockMode,
     B.MACHINE,D.SPID ,b.PROGRAM
     from v$lock a,v$session b,all_objects c,V$PROCESS D
     where a.sid=b.sid and a.type in ('TM','TX')
     and c.object_id=a.id1
     AND B.PADDR=D.ADDR
     ---order by username     
    2解锁
      alter   system     kill   session   '91,437';(其中91为SID,427为SERIAl#) 

  • 翻页功能的测试用例(为了日后自己用方便就放空间里了)

    2010-03-19 15:17:18

    空间内容是从网络搜索整理的,纯粹为自己用的时候方便找

     

    翻页功能我们常碰到的一般有以下几个功能:
    1、首页、上一页、下一页、尾页。
    2、总页数,当前页数
    3、指定跳转页
    4、指定每页显示条数
    当然,有一些是少于多少页,全部以数字的形式显示,多于多少页后,才出现下一页的控件。本文暂且用以上四点来做为通用的用例来设计吧。

    对于1翻页链接或按钮的测试,主要要检查的测试点有:
    1、有无数据时控件的显示情况
    2、在首页时,首页和上一页是否能点击
    3、在尾页时,下一页和尾页是否能点击
    4、在非首页和非尾页时,四个按钮功能是否正确
    5、翻页后,列表中的记录是否仍按照指定的排序列进行了排序
    对于2总页数,当前页数,主要要检查的测试点有:
    1、总页数是否等于总的记录数/指定每页条数
    2、当前页数是否正确
    对于3指定跳转页,主要要检查的测试点有:
    1、是否能正常跳转到指定的页数
    2、输入的跳转页数非法时的处理
    对于4指定每页显示条数,主要要检查的测试点有:
    1、是否有默认的指定每页显示条数
    2、指定每页的条数后,列表显示的记录数,页数是否正确
    3、输入的每页条数非法时的处理

    分析完上面的测试点,应该可以进行用例的设计了。
    step 1: 列表无记录  
    expect: 1、四个翻页控件变灰不可点击
            2、列表有相应的无数据信息提示
            3、不可指定页数
            4、不可指定跳转页
            5、总页数显示为0
            6、当前页数显示为0

    step 2: 列表的记录数<=指定的每页显示条数
    expect: 1、四个翻页控件变灰不可点击
            2、总页数显示为1
            3、当前页数显示为1

    step 3: 列表的记录数>指定的每页显示条数
    expect: 1、默认在首页,当前页数为1              
            2、列表的数据按照指定的排序列正确排序
            3、记录数与数据库相符
            4、总页数=记录数/指定的每页显示条数

    step 4: 列表的记录数>指定的每页显示条数,在首页
    expect: 1、首页变灰不可点击
            2、上一页变灰不可点击
            3、下一页可点击,从(每页指定条数+1)条记录开始显示,当前页数+1
            4、尾页可点击,显示最后页的记录

    step 5: 列表的记录数>指定的每页显示条数,在中间的某页
    expect: 1、首页可点击,显示1到每页指定条数的记录
            2、上一页可点击,显示上一页的记录
            3、下一页可点击,从后一页的记录
            4、尾页可点击,显示最后页的记录
            5、列表的数据按照指定的排序列正确排序
            6、当前页数为所在页

    step 6:列表的记录数>指定的每页显示条数,在尾页
    expect: 1、首页可点击,显示1到每页指定条数的记录
            2、上一页可点击,显示上一页的记录
            3、下一页变灰不可点击
            4、尾页变灰不可点击
            5、列表的数据按照指定的排序列正确排序
            6、当前页数为最后一页的页数

    step 7:输入每页显示条数为正整数
    expect: 1、每页显示条数更新成指定的条数
            2、超过指定的条数的记录分页显示
            3、总页数更新成列表的记录数/每页显示条数

    step 8:输入每页显示条数为0
    expect: 1、提示“每页显示条数必须为大于1的整数”
            2、提示后每页显示条数恢复为上次生效的条数

    step 9:输入每页显示条数为负数
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 10:输入每页显示条数长度超过数据库指定的长度<<<maxlen>>>
    expect: 1、提示每页显示条数不能超过<<<maxlen>>>位
            2、提示后每页显示条数恢复为上次生效的条数

    step 11:输入每页显示条数为字符串,如中文翻页数
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 12:输入每页显示条数为特殊字符,如%
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 13:输入每页显示条数为html字符串,如<br>
    expect: 1、提示每页显示条数必须为大于1的整数
            2、提示后每页显示条数恢复为上次生效的条数

    step 14:输入跳转的页数为存在的页数
    expect: 1、正确跳转到指定的页数

    step 15:输入跳转的页数不存在或非法值
    expect: 1、跳转的页数值置为1,显示第一页的数据

    以上的用例是将总页数,当前页数都揉进了翻页控件的测试用例中了

Open Toolbar