zoukankan      html  css  js  c++  java
  • vim 常用操作

    vim  

    2010-03-21 22:40:27|  分类: linux misc|字号 订阅

     
     
    //
    那么,给你一个最简单的方法:
    sudo apt-get install vim-scripts
    vim-addons install taglist
    想要打开taglist,只需在vim里输入":Tlist"即可,当然你要确保你已经安装了ctags
     
    //seven habits for effective editing:
    *==>快速搜索
    /pattern
    % ==> 用于匹配括号  {} [] ()
     [{ ==>跳到本代码块是用"{}"括起来的程序段的   开始的 : {
    gd==>     go to defition 跳到定义
    .==> 重复刚才的运行
    qa==> 开始记录成宏(每一个动作),会记录进 a 寄存器中, 按下 q 可以完成记录。 调用该宏:@a
    :abbr==>简写。
    :grep==> 
    :make
    养成习惯。
     
    //
    进行编辑时,注意发现自已要重复的动作。
    找可用的命令,对自己来说很有用的命令
    训练熟练使用命令(without thinking)
     
     
     
    执行sudo apt-get install vim-full这个啊!!
    1:
    //可视块:
    先ctrl + v
    然后移动之,形成块,最后 按y 复制。
    然后回到一般模式: 按p.
     
    2:
    在命令模式下,
    :r filename,可以//把整个文件读入到当前位置。
     
    3://移动
    按『 G 』到最後一行
    按『 u 』可以复原。即取消刚才的改变。 == ctrl + z
    j :下
    k:上
    l:右
    h:左
    e: 下一个单词的后面。
    w: 下一个单词的前面。
    0: 行头
    $:      行尾。
     
     
    4:
    在一般模式下,输入 4yy 可以从当前位置开始复制4行。
    5:
    同时编辑多个文件: vi xx.txt yy.txt.
    然后在里面可以使用 :n 进入下一个文件, :N 进入上一个文件。
     
    6:
    多视窗口功能。
    :sp 使同一个文件分开两个窗口中同时显示
    :sp filename 使用在另一个窗口中显示以对比。
    然后使用 
    ctrl + w + 上   可以操作上面那个窗口
    ctrl + w + 下   可以操作下面的那个窗口。
    ctrl + 双击w   可以在两个窗口间切换
    在那个窗口 :q   就是退出那个窗口。
    7:
    查看所有设置
    :set all
     
    8:
    查看行号 :set nu,   :set nonu
    高亮查找结果:  :set hlsearch  :set nohlsearch
    自动缩排:  :set autoindent   :set noautoindent
    自动备份:  :set backup   
    显示不显示状态值:  :set ruler
    显示模式   :set showmode
    :set backspace=0/1/2 设定当进入插入模式后,按下backspace时可不可以删除原来就存在的字符。
    :syntax on 根据语法显示不同的颜色。
    :syntax off
     
    :set bg=dark / bg=light  设置背景色。
     
    9:
    文件字符码的转换: iconv -f utf8 -t gb2312 xx.txt
     
    10:  //**************** 撤消   重做  *****************************************//
    重复: ctrl + r
    撤消: u
    重复做上一步: .
     
    11: 
    //进入编辑模式:
    a: 要当前光标"前"插入
    i: 在当前光标"后"插入
    o: 在当前行的"下一行插入"一行
    O: 在当前行的"上一行插入"一行。
    R: 进入replace模式进行编辑。
     
    12:
    //****************************查找************************************************//
    set hlsearch:  打开高亮查找匹配。
    /xxx  向下查找。 "然后n 表示再向下查找。 而N表示向上查找。
    ?xxx 向上查找,
    *       : 搜索里最最有用的快捷方式是“*”(向下完整匹配光标下的单词)。
    "把光标移动到你要搜索的词(变量名、函数名等)上,比如“test”,然后按“*”,Vim 将自动产生一个对“\<test\>”
    /\<abc\>  表示完全匹配abc这个单词的查找。
    # :(向上完整匹配光标下的单词)、
    g*(向下部分匹配光标下的单词),请自行查看(“:help #”等)。
    nmap <F2> :nohlsearch<CR> 。Vim 专门提供一个命令取消这种加亮(直到用户再一次使用搜索或替换命令
     
     
     
     
    13:
    //**************查找并替换:****************************//
    :n1,n2s/ori/replace/g ,即在n1行与n2行之间找到ori并用replace替换。
    :1,$s/word1/word2/g  從第一行到最後一行尋找
     
    再看几个搜索替换的实用例子。
    1:去掉所有的行尾空格:“:%s/\s\+$//”。
    “%”表示在整个文件范围内进行替换,“\s”表示空白字符(空格和制表符),“\+”对前面的字符匹配一次或多次(越多越好),“$”匹配行尾(使用“\$”表示单纯的“$”字符);
    被替换的内容为空;由于一行最多只需替换一次,不需要特殊标志。这个还是比较简单的。
    2:去掉所有的空白行:“:%s/\(\s*\n\)\+/\r/”。
    这回多了“\(”、“\)”、“\n”、“\r”和“*”。“*”代表对前面的字符(此处为“\s”)匹配零次或多次(越多越好;使用“\*”表示单纯的“*”字符),“\n”代表换行
    符,“\r”代表回车符,“\(”和“\)”对表达式进行分组,使其被视作一个不可分割的整体。因此,这个表达式的完整意义是,把连续的换行符(包含换行符前面可能有的连续空白字符)替换成为一个单个的换行符。
    唯一很特殊的地方是,在模式中使用的是“\n”,
    而被替换的内容中却不能使用“\n”,而只能使用“\r”。原因是历史造成的,详情如果有兴趣的话可以查看“:help NL-used-for-Nul”。
    3:去掉所有的“//”注释:“:%s!\s*//.*!!”。
    首先可以注意到,这儿分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不换用其他分隔符的话就得在每次使用“/”字符本身时写成“\/”,上面的命令得写成“:
    %s/\s*\/\/.*//”,可读性较低。命令本身倒是相当简单,用过正则表达式的人估计都知道“.”匹配表示除换行符之外的任何字符吧。
    4:去掉所有的“/* */”注释:“:%s!\s*/\*\_.\{-}\*/\s*! !g”。
    这个略有点复杂了,用到了几个不太常用的 Vim 正则表达式特性。“\_.”匹配包含换行在内的所有字符;“\{-}”表示前一个字符可出现零次或多次,
    但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志“g”表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像“int/* space not necessary around comments */
    main()”这样的表达式在替换之后仍然是合法的。
     
    14:
    //****************删除:*******************************//
    dd: 删除当前行
    ndd  删除当前以下n行
    d1G: 从当前行到第一行,全删。
    dG:  从当前行到最后一行全删。
    dw: 删除当前光标到下一个分隔处的所有字母。
    d$: 删除当前光标到本行最后一个字母。
    d0: 删除当前光标到本行最前一个字母。
    d2G: 删除本行到第二行所有。
    dG: 删除本行到最后一行所有。
     
     
    15:
    tabnew
    tabfirst
     
    16:   
    //*********************** 自定义 快捷方式  ***********************//
    let mapleader = ","    //先设置先置命令,leaper
    map <silent> <leader>ee :e "~/.vimrc"<cr>   // 设置命令。 映射: ,ee ==> e ~/.vimrc
     
    17:
    //*******************自动执行命令****************************//
    autocmd! bufwritepost .vimrc source ~/.vimrc 
     
    18:跳转
    多次/*使用 nG 跳转后。会生成一个跳转表*/, 使用命令”:jumps“可以查看跳转表(:help :jumps)。
    例如,当前光标位于文件中第1234行,然后我使用”4321G“命令跳转到第4321行;这时如果我按””“或”““,就会跳回到1234行。
    跳到更老的位置:”CTRL-O“;
    跳到较新的位置:”CTRL-I“
     
    19:
    标记(mark)是vim提供的精确定位技术,其功能相当于GPS技术,只要你知道标记的名字,就可以使用命令直接跳转到该标记所在的位置。手册(:help mark-motions)。
    小写字母标记局限于缓冲区,也就是说,每个缓冲区都可以定义自己的小写字母标记,各缓冲区间的小写字母标记彼此不干扰。
    大写字母标记是全局的,它在文件间都有效。如果在文件A中定义一个标记T,那么当使用命令”‘T“时,就会跳到文件A的标记T位置,不管你当前处于哪个文件中。
    设定一个标记很简单,使用命令”m{a-zA-Z}“就可以了。例如,命令”mt“在把当前光标位置设定为标记t;命令”mT“把当前光标位置设定为标记T。
    要跳转到指定的标记,使用命令”‘{a-zA-Z}“或”{a-zA-Z}“。例如,命令”‘t“会跳转到标记t;命令”‘T“会跳转到标记T。( :help ‘)
    单引号和反引号的区别和上面所讲的一样,”`“在跳转时会精确到列,而”‘“不会回到跳转时光标所在的那一列,而是把光标放在第一个非空白字符上。
    标记也可以被删除,使用命令”:delmarks“可以删除指定标记。命令”:marks“列出所有的标记
    关于标记,有两个非常有用的插件,一个是ShowMarks,另外一个叫marks browser。.
     
     
    20: 搜索  替换
     
    :100,200s/abc/cde/g     把100行到200行间的 abc 换成 cde, 不是只换单词的。。。
    :1,$s/abc/cde/g         把第1行到最后一行的。。。。
    :1,$s/abee/df/gc        gc, 表示 要在替换前 要确认。
    :s/old/new 只替换第一个匹配的。
    :s/old/new/g 替换整行中匹配的。
    :%s/old/new/g 全文件替换所有匹配的。
    :%s/old/new/gc 全文件替换匹配的,同时要用户确认。
    :n,ms/old/new/gc 从n行 到m替换。
    set ic ignore case
     
     
     
     
     
    21:
    J:  合并本行与下一行为同一行。
    c[we$]: 可用于 删除对应的字母,并进入插入模式。 w,多个字母及空格。 e, 多个字母。$,行未。
     
    22:
    % : 用于去找"当前行下一个位置上的括号"的 匹配括号。
     
    23:
    :!ls 执行外部的ls命令。
    :!command 执行外部的command。
     
     
    24:
    set so 8 : 表示 设置在光标垂直移动时,光标以下最少显示多少(8)行。
     
     
    25://模式行: modeline
     
    /* vim: set tabstop=4 shiftwidth=4 expandtab: */
    以上这行在代码中,最前面几行或最后几行中出现,当vim读取时,会识别并完成上面 的设置。
    行首的“/*”和尾部的“*/”告诉 C 编译器这是一行注释,不是代码的一部分;
    而 Vim 可通过后面的“vim:”识别出模式行的开始(必须出现在行首或前面有一个空白字符);后面则是“set”和空格间隔开的一串 Vim 选项;“:”表示模式行结束。
    模式行中的选项只影响当前文件
     
     
     
    26://寄存器 即 剪贴板
    "+p  :从X WINODW 的剪贴板中 粘贴
    "*p  :从 VIM 的 *寄存器中粘贴。
    :reg  查看所有register的内容。 或ctrl + shift + r
    :help "  查看register的帮助。
    通常的编辑器有一个剪贴板,以存储复制和剪切的内容。Vim 中的类似概念叫做寄存器(register)。
    有一个无名寄存器: "
    和一大堆有名的寄存器
    无名: "
    在使用了x windows 注意:"* 访问的寄存器是 X 的主选择区域(primary selection),
    "+ 访问的寄存器是 X 的剪贴板(clipboard)。
    如果你要在 Vim 和其它的 X 应用程序之间复制文本内容,你可以试一下这两个寄存器。
    还有一个很特殊的“寄存器”:“=”。在插入模式或命令模式中,键入“Ctrl-R=”,Vim 会提示你输入一个表达式,普通的整数运算在此完全有效。如果想要进行浮点运算, 
     
    ”ayy: 把当前行复制到 寄存器 a 中。
    “ap:  把寄存器a 中的内容 粘贴。
     
    可先用v,ctrl+v,V选择一块,然后用y复制,再用p粘贴
    也可以"ay[motion]: "ay$(复制光标位置到行末保存在a寄存器),"ayft(复制光标位置到当前行第一个t字母出并保存在a寄存器),然后用"ap粘贴
     
    选中:    冒号提示下,按v,移动光标选中区域
    剪切:    d
    复制:    y
    粘贴:    p
     
     
    27:// 自动完成和路径设定
    CTRL + p: 编程中。当打下 部分字母后,按 CTRL + p,则会自动补全。补全是从path 及  include 中找。
    gf    :设置了合适的 path 后,另外带来的一个便利就是可以使用“gf”命令方便地跳转到光标下的文件名所代表的文件中。
    在上面的例子中,把光标移到“stdio.h”的任一字符上,键入“gf”,则 Vim 会自动打开 /usr/include/stdio.h 文件。使用“Ctrl-O”(参见“:help CTRL-O”)可返回到原先的文件中。
     
    28: //ctags
    ctags -R .  :简单介绍如何在一个典型的多文件、多层目录的项目中使用其基本功能:
     
    "我们只需在项目的根目录处键入“ctags -R .”,
    Ctags 即可自动在文件中查找、识别支持的文件格式、生成 tags 文件。
    CTRL + ]: 跳转 到定义处。
    CTRL + o: 返回上一个位置
    g]:       显示多个定义的列表,让用户去选择。
    :tn(跳转到下一个匹配的标记处)
    :tp(跳转到上一个匹配的标记处)
    但是由于进入到对应目录下,只有该目录下有tags文件才会成功执行,这时就要在对应的项目的 vimrc 下添加对应的: 
    u BufEnter /home/my/proj1/* setlocal tags+=/home/my/proj1/tags     */
    au BufEnter /home/my/proj2/* setlocal tags+=/home/my/proj2/tags   */
     
    29: make grep
    :grep foo *.c  这个会直接执行 grep 。
    :cn(显示下一个错误)
    :cp(显示上一个错误)
    :cl(列出所有的错误及其编号)
    :cc(跳转到指定编号的错误)
    :copen(打开快速修订窗口,
    :cclose(关闭快速修订窗口)
     
    30:// 列块编辑
    ctrl + v : 进入列选择模式,然后按大写 I ,然后就可以输入要在每列输入的内容, 最后按 ESC即可。
    按 x 也可以删除。
     
     
     
    30:其它小技巧
    也许你会觉得这些很有用:
    % (跳转到与之匹配的括号处)
    . (重复上次的修改命令)
    `. (跳转到最近修改过的位置)
    ZQ (无条件退出)
    ZZ (存盘退出)
    ga (显示光标下的字符在当前使用的 encoding 下的内码)
    guw (光标下的单词变为小写)
    gUw (光标下的单词变为大写)
    :TOhtml (根据 Vim 的语法加亮的方式生成 HTML 代码;在图形界面中也可以使用菜单“Syntax—Convert to HTML”达到同样效果)
     
    无聊的时候,还可以试试(呵呵!):
    :help!
    :help 42
    :help holy-grail
     
    31: 支持中文
    如果你的系统你自己的主目录中有.vimrc就加入下面二行,如果没有,就建一个这个文件.
        let &termencoding=&encoding
        set fileencodings=utf-8,gbk,ucs-bom,cp936
     
    32:
    在windows用ultraedit写了一堆cp的script文件, 然后上传到Linux下运行,发现出错. 在VI下看文件,原来是换行符变成了 ^M.
    用PICO打开文件,然后重新存储.^M消除,文件能正常执行了.
     
     
     
    //**************************************//
    本节所用命令的帮助入口:
     
    :help mksession
    :help 'sessionoptions'
    :help source
    :help wviminfo
    :help rviminfo
    :help 'viminfo'
    要恢复上次的编辑环境,我们需要保存两种不同的信息,一种是会话(session)信息,另外一种是viminfo信息。
     
    //会话信息  中保存了所有窗口的视图,外加全局设置。
    //viminfo信息 中保存了命令行历史(history)、搜索字符串历史(search)、输入行历史、非空的寄存器内容(register)、文件的位置标记(mark)、最近搜索/替换的模式、缓冲区
    列表、全局变量等信息。
     
     
    :mksession [file]命令来创建一个会话文件,如果省略文件名的话,会自动创建一个名为Session.vim的会话文件。
    :source session-file来导入会话文件。因为会话文件是一个脚本,里面保存的是Ex命令,所以”source“命令只是把会话文件中的Ex命令执行一遍。
     
    :wviminfo [file]命令,可以手动创建一个viminfo文件。
    :rviminfo [file]命令。读入你所保存的viminfo文件
     
    //**********************************************************//
    本节所用命令的帮助入口:
     
    :help compatible
    :help mapleader
    :help map
    :help autocmd
    vim中自带了一个vimrc例子,让我们从这个例子开始吧。
    下面我以Linux下的vim为例,windows版本的vim,会在后面提到。
    示例的vimrc(名为vimrc_example.vim)通常位于/usr/share/vim/vimXXX/目录下,其中vimXXX与你所使用的vim版本有关。
    首先把这个示例的vimrc拷贝到相应的目录,在Linux下,应该把它拷贝到你的home目录下,名字为”.vimrc”,下面是shell命令:
    cp /usr/share/vim/vim70/vimrc_example.vim ~/.vimrc 
     
    把下面这段内容拷贝到你的vimrc中:
     
    1    "Set mapleader
    2    let mapleader = ","
    3
    4    "Fast reloading of the .vimrc
    5    map <silent> <leader>ss :source ~/.vimrc<cr>
    6    "Fast editing of .vimrc
    7    map <silent> <leader>ee :e ~/.vimrc<cr>
    8    "When .vimrc is edited, reload it
    9    autocmd! bufwritepost .vimrc source ~/.vimrc 
     
    为了方便解释,我给每一行都加了一个行号。
     
     在vimrc中,双引号开头的行,将被当作注释忽略。
     第2行,用来设置mapleader变量,当mapleader为未设置或为空时,使用缺省的”\”来作为mapleader。
    mapleader变量是作用是什么呢?看下面的介绍。
     
     第5行定义了一个映射(map),这个映射把<leader>ss,映射为命令:source ~/.vimrc<cr>。当定义一个映射时,可以使用<leader>前缀。而在映射生效时,vim会把<leader>替换成mapleader变量的值。也就是说,我们这里定义的<leader>ss在使用时就变成了”,ss“,当输入这一快捷方式时,就会source一次~/.vimrc文件(也就是重新执行一遍.vimrc文件)。
     第7行,定义了<leader>ee快捷键,当输入,ee时,会打开~/.vimrc进行编辑。
     第9行,定义了一个自动命令,每次写入.vimrc后,都会执行这个自动命令,source一次~/.vimrc文件。
     
    vim自带的示例vimrc中,只定义最基本的配置。
    在http://www.amix.dk/vim/vimrc.html有一个非常强大的vimrc,有人戏称为”史上最强的vimrc”,或许有些言过其实。不过,如果你通读了这个vimrc,相信能从中学到很多……
     
     
     
    //****************vim 函数 ***调用: call SwitchToBuf("./xx.txt")******************************//
    " Platform
    function! MySys()
      if has("win32")
        return "windows"
      else
        return "linux"
      endif
    endfunction
     
    function! SwitchToBuf(filename)
        "let fullfn = substitute(a:filename, "^\\~/", $HOME . "/", "")
        " find in current tab
        let bufwinnr = bufwinnr(a:filename)
        if bufwinnr != -1
            exec bufwinnr . "wincmd w"
            return
        else
            " find in each tab
            tabfirst
            let tab = 1
            while tab <= tabpagenr("$")
                let bufwinnr = bufwinnr(a:filename)
                if bufwinnr != -1
                    exec "normal " . tab . "gt"
                    exec bufwinnr . "wincmd w"
                    return
                endif
                tabnext
                let tab = tab + 1
            endwhile
            " not exist, new tab
            exec "tabnew " . a:filename
        endif
    endfunction
     
    "Fast edit vimrc
    if MySys() == 'linux'
        "Fast reloading of the .vimrc
        map <silent> <leader>ss :source ~/.vimrc<cr>
        "Fast editing of .vimrc
        map <silent> <leader>ee :call SwitchToBuf("~/.vimrc")<cr>
        "When .vimrc is edited, reload it
        autocmd! bufwritepost .vimrc source ~/.vimrc
    elseif MySys() == 'windows'
        " Set helplang
        set helplang=cn
        "Fast reloading of the _vimrc
        map <silent> <leader>ss :source ~/_vimrc<cr>
        "Fast editing of _vimrc
        map <silent> <leader>ee :call SwitchToBuf("~/_vimrc")<cr>
        "When _vimrc is edited, reload it
        autocmd! bufwritepost _vimrc source ~/_vimrc
    endif
     
    " For windows version
    if MySys() == 'windows'
        source $VIMRUNTIME/mswin.vim
        behave mswin
    endif 
     
     
     
    字母表顺序的命令速查手册
    ) 下一句 
    ( 上一句 
    } 下一段 
    { 上一段 
    ]] 下一节 
    [[ 上一节 
    0 行的开头 
    $ 行的末尾 
    ^ 行的第一个非空白字符 
    + 下一行的开头 
    - 上一行的开 
    (空格) 下一个字符 
    (回车) 下一行 
    / 向前搜索 
    ? 向后搜索 
    % 查找当前小(中,大)括号的匹配字符 
    , 逆向重复上一个f,F,t或T操作 
    ; 重复上一个f,F,t或T操作 
    . 重复上一个操作 
    ` 转到标记处 
    ' 转到标记所在行的开头 
    `` 查找前回到上一个做标记的地方 
    '' 查找前回到上一个做标记所在行的开头 
    ~ 切换字符的大小写 
    " 保存到寄存器中 
    !! 重复上一次SHELL命令 
    ! 把后面的文本送给命令, 取代输出(例如, !}fmt把当前的段落 
    送给命令fmt处理,然后用fmt返回的东西替换输出.) 
    >> 右移当前段落一个移动宽度(shiftwidth) 
    << 左移当前段落一个移动宽(shiftwidth) 
    >% 从当前到匹配小(中,大)括号之间的文本右移 
    <% 从当前到匹配小(中,大)括号之间的文本左移 
    (似乎漏了一个符号|, 移动到某一列----译注) 
    a 在当前位置之后添加 
    A 在当前行的末尾添加 
    ^a 没有使用 
    b 上一个单词的开头 
    B 上一个单词的开头,忽略标点符号 
    ^b 上移一屏 
    c 覆盖... 
    C 覆盖到行末尾 
    ^c 终止插入模式,在命令模式没有用 
    d 删除... 
    D 删除到行末尾  
     
    ^d 下移半屏,如果在插入模式下则移到上一个移动宽度(ShiftTab)处 
    e 单词的末尾 
    E 单词的末尾,忽略标点符号 
    ^e 屏幕下卷一行 
    f 查找... 
    F 向后查找... 
    ^f 下移一屏 
    g 未用 
    G ...跳至[缺省是到文件末尾] 
    ^g 显示状态栏 
    h 左移 
    H 屏幕上的第一行 
    ^h 在插入模式下是退格,命令模式下是左移 
    i 在当前的位置前面插入 
    I 在本行的第一个非空白字符前面插入 
    ^i 插入模式下是制表键,命令模式下未用 
    j 下移 
    J 把下一行合并到本行 
    ^j 命令模式下是下移,插入模式下是建一个新行 
    k 上移 
    K 未用 
    ^k 未用 
    l 右移 
    L 屏幕中的最后一行 
    ^l 重绘屏 
    m 把当前位置标记到寄存器中 
    M 屏幕的中间行 
    ^m 回车 
    n 重复上次查找 
    N 逆向重复上次查找 
    ^n 命令模式下是下移 
    o 在当前行的下面建一个新行 
    O 在当前行的上面建一个新行 
    ^o 未用 
    p 在当前行的下面粘贴 
    (译注--应为在当前位置的后面粘贴) 
    P 在当前行的上面粘贴 
    (译注--应为在当前位置的前面粘贴) 
    ^p 命令模式下是上移 
    q 未用 
    Q 退出并且启动ex 
    ^q 未用 
    r 覆盖当前的字符 
    R 在插入模式下一直覆盖字符 
    ^r 在命令模式下面重绘屏幕 
    s 替换 
    S 替换整行 
    t 到... 
    T 向后到... 
    ^t 移到下一个移动宽度(shifttab)处 
    u 撤消上一次操 
    U 撤消对本行的所有修改 
    ^u 上移半屏 
    v 未用 
    V 未用 
    ^v 未用 
    w 下一个单词的开头 
    W 下一个单词的开头,忽略标点符号 
    ^w 命令模式下未用,在插入模式下是到上一个单词的开头处 
    x 删除当前字符 
    X 删除前一个字符 
    ^x 未用 
    y 复制... 
    Y 复制整行 
    ^y 屏幕上卷一行 
    z 重新配置当前行周围的屏幕 
    ZZ 保存之后退出 
    ^z 未用
     
     
    -------------------------------------------------------------------------------------------------------------------------------
    /string  向前搜索指定字符串
    ?string 向后搜索指定字符串
    n 搜索指定字符串的下一个出现位置
    N 搜索指定字符串的上一个出现位置
    :%s/old/new/g 全文替换指定字符串
  • 相关阅读:
    我心飞翔
    又见草堂
    有一种爱只能用心去珍藏《转贴》
    人事管理制度(爆笑)
    廊桥放歌
    记住: 惰性,职业生涯的无形杀手
    职场“三无人员”如何突破自己
    升职“流产”,都是谦虚惹的祸(转)
    李嘉诚让员工忠诚的简单办法
    尤未尽意
  • 原文地址:https://www.cnblogs.com/hengli/p/2845359.html
Copyright © 2011-2022 走看看