zoukankan      html  css  js  c++  java
  • VIM第七版

    ZZ:退出并保存

    e!:退回到上次保存时的样子
    cw:修改单词(自动进入插入模式)
    cc:修改一整行的内容
    cs:修改一个词(自动进入插入模式)
    .:可以重复上一个命令

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    EX命令
     
     
    EX命令的逻辑是 将命令作用与指定的地址,有些命令只有源地址参数,而有些命令则由目的地址参数。
     
    EX命令:
          d:删除行
          t/co:复制行(有目的地址)
          p:打印行
          nu:显示行号
          w:保存行
          #:显示行号
          
    EX定位行的方法
          绝对方式: a.   "."表示当前行,为默认值,如果没有显示指定则为默认行(相当于有一个".")
                         b.   "$"最后一行
                         c.   "0"第一行之前
                         d.   "num"第num行
                         e.   /pattern/模式匹配出现的第一次所在行
                   
     
           相对方式:a. [一个绝对行号]+[num]   如果没有”绝对行号“则相对于当前行, 如果没有num则为1 ,绝对行后面的第num行
                           b.  [一个绝对行号]-[num]   如果没有”绝对行号“则相对于当前行, 如果没有num则为1 ,绝对行前面的第num行
     
            相对地址和绝对地址组合构成各式各样的地址和地址范围
      例如命令:
         :1,20 s/awk/sed/g
         :/^luo/,/^lcm/s/awk/sed/g  将"luo"开头的行到"lcm"开头的行中的所有行做替换操作
         :g/^luo/s/awk/sed/g   将所有以luo开始的行执行替换操作
     
         :=  ->列出总行数
         :.=  ->列出当前行
         :/pattern/=  ->列出第一次匹配的行号
     
         有些时候,希望后续地址是针对前序匹配的地址进行偏移,则使用分号表示地址分隔符,例如:
     
            (当前光标在120行) 则    100,+20   表示的是100,140行的范围
              而 100+20则表示100,120的访问
     
     
     
     
    g表示 定位范围内的所有匹配的 ,g!相反 。如果没有g则表示是第一次出现。
    可以用‘|’合并多个命令,后续命令作用在前序命名的结果之上。
     
    ":x"与":wq"命令的差别,前者只有文件有改变是才写人,而后者无条件写人。
     
    :w file_name  -> saveas file_name ->另存为
     
    :范围 w file_name  -> 将范围内的内容保存到新文件
     
    :w >> file_name   ->将当前文件内容追加到新文件中
     
    :地址 r file_name  ->将文件读到当前文件的地址之下
     
    操作多个文件
     
    在命令行加多个文件名作为参数,打开多个文件,视图位于第一个文件,
     
    使用命令“:ar[gs]”可以查看打开的文件列表,由"[]"包括的文件名,是真正编辑的文件。
     
    通过:n,ctrl+^切换文件。
    “rew"切换到第一个文件
    ”last“切换到最后一个文件。
     
    :e! ->加载最后一次保存的文件
     
    %:代表当前的文件名称
    #:代表候补的文件名称
     
    用":e"命令加载新文件时,不会清除命名缓冲区的内容。
    :ya ->将内容拖入缓冲
    :pu ->将内容从缓冲复制到文件。


    :g/pattern/s/old/new/g:在满足模式的行做替换操作(第一个g表示作用于所有模式匹配的行,第二个g表示作用于匹配行里面的所有匹配old的地方)。
    :g/pattern/s//new/g将匹配的行的内容替换成new  s后面的“//"表示之前匹配的内容
     
    替换串(new) 中的特殊字符含义
    : 代表捕获
    &:代表匹配的串
    ~:代表上一次替换时,用来替换的串
    u:将后接的字符变成大写
    U:将后接的字符串变成大写
    l:将后接的字符变成小写
    L:将后接的字符串变成小写
    &:重复上一次执行的替换操作
     
     
     
     
     
     
     
    选项设置
     
    1.vi首先从terminfo数据库读取当前终端的配置信息
    2.vi 打开之前首先执行环境变量EXINIT中的命令,然后是家目录的".exrc"文件中的命令。
    3.":set"命令支持两类选项设置
        a.    :set option   /    set nooption (打开或关闭某个选项)
        b.    :set option=数字或字符串
     
    4.":set all"显示所有选项的当前设置值
       ":set"显示特殊设置值
       ":set option?"查看某个选项当前的设置值。

    .exrc文件
     
       1.在.exrc中的命令不需要加前导":"号。
       2.要使本地.exrc文件生效,需要在家目录的.exrc中设置命令"set exrc"
       3.可以将命令写入其他任何文件,然后用命令":so 文件名"将该文件的设置在vi中生效。
     
    使用unix命令
     
    1.  :!:产生一个子sh后面跟命令
    2.  :sh 打开一个shell连续执行命令,ctrl+d返回vim
    3.  :[linenum]r !command 将命令结果插入到 linenum下
    4.  :[linenum]r file 将文件内容读入到linenum下
    //将文件中的内容作为命令的输入,命令输出将覆盖文件当前的内容
    5.  :[linenum1,linenum2] !cmd
    6. vi的方式 不用冒号 [replay times]![文本行范围定位命令]  unix命令
    7.在vi中可以设置缩写(在插入模式输入缩写,在按下非字母键时会补全)
       :ab 查看当前定义的所有缩写
       :ab lcm luo cai min   //将"luo cai min"设置成缩写串 lcm
       :unab lcm 取消缩写
    8.设置命令缩写
       :map shortcmd  cmd cmd cmd //在命令里面出现的功能键需要先按ctrl+v再输入
     
     
    map rd          :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin delete begin <Esc>A */<CR>#if 0<CR>#else<CR>#endif<CR><Esc>pI/* luocaimin delete end <Esc>A */<CR>
     
    map ra          :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin add begin <Esc>A */<CR><Esc>pI/* luocaimin add end <Esc>A */<CR>
     
    map rae           :r !date +'\%Y\%m\%d'<CR>I/* luocaimin add end <Esc>A */<CR>
    map rab           :r !date +'\%Y\%m\%d'<CR>I/* luocaimin add begin <Esc>A */<CR>
    map ra          :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin add begin <Esc>A */<CR><Esc>pI/* luocaimin add end <Esc>A */<CR>
    map rd          :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin delete begin <Esc>A */<CR>#if 0<CR>#else<CR>#endif<CR><Esc>pI/* luocaimin delete end <Esc>A */<CR>
     
    "求当前行代表的公式之和
     
    map lsum  yyp:.!bc<CR>I<C-H>i=<Esc>
     
     
    在单词末尾进入插入模式  :map e ea
    对调两个单词                  :map K dwwp
    保存一个文件并进入下一个文件   :map q :w^M:n^M
    注释代码    :map rmk I/* ^[A */^[
     
    9.需要在插入模式中将某个插入值作为命令则需要在map后面加上! 
     
     eg:xml tag自动补全
     :map! >  >^[F<lyf>f>a<^[p
     
    10. 在编辑模式输入命令串,然后读入命令缓存(通过删除的方式" "gdd "将命令读入命名缓存区g),通过“@命名缓存”来执行命令。“@”会解释为vi命令
     
    11.自动缩排 :  ":set autoindent" 的作用是让新行与上一行有相同的缩进。
         在自动缩排下输入代码时(插入模式),在行头"ctrl t"将执行下一层缩排,"ctrl d"相反。

     
         "5<<"将包括当前行在内的以下5行向左缩进8个字符的位置 "5>>"相反
     
     
         :set tabstop=4  设置tab的宽度为4个字符
     
      
    12: ":set list"显示整个文件的隐藏字符。  ":l"显示当前行的隐藏字符
    13:"%"如果没有在括号字符'{([])}'上,会移到本行的向前找到的第一个括号上。
     
    14:  ":set showmatch"在输入括号时会高亮显示其匹配的括号。
     
    15:ctags
           15.1 ctags -R 从当前目录迭代搜索源文件,并建立tags文件。  
           15.2 ":set tags=tags文件" 指定tags文件
           15.3  ":tag  GET_BALANCE" 查找并跳转到GET_BALANCE所在文件和位置 ,":stag tagname"用横屏分页的方式显示符号
           15.4  将光标位于符号之上,ctrl+] 跳转到符号所在文件和位置  , ctrl+w+]  用横屏分页的方式显示符号
           15.5   ctrl+t 返回到跳转之前的位置
           15.6 ":stag[!] tagname" 新窗口打开标签
     
    16: '*'高亮显示光标下的单词并进入搜索模式,'#'高亮显示光标下的单词,并进入反向搜索模式。
     
    17: 'viw'可视模式下选中一个单词
     
    18.自动添加tag(当文件有变化时自动更新tags文件)
         autocmd BufWritePost *.cpp,*.c,*.h :!cur_dir=`pwd` && cd ~ && ctags -a %:p && cd -
         注  %:p表示带路径的当前文件名
     
    19. 在可视模式下的选中区
          19.1  "niw":选中光标下及后面的n个单词,标点号和空字符都算一个单词
          19.2  "niW":选中光标下及后面的n个单词,空格算一个单词
          19.3  "naw":选中光标下及后面的n个单词,标点算一个单词,空格算分隔符
          19.4  "naW":选中光标下及后面的n个单词,标点不算一个单词,空格算分隔符
          19.5  "as","is":选中一句话
          19.6  "ap","ip": 选择一段话。
     
    vi -o[n] file1 file2
    set laststatus=n
    set winheight=n
    set winwidth=n
    ctrl+w+s/v
    ctrl+w+h/j/k/l/t/b
    ctrl+w+q
    ctrl+w+c
    :split otherfile
    :vsplit otherfile
    :new
    :[N]sp[lit] ++opt +cmd other
     
     
     
     
    缓冲区
     
    ls:列出缓冲区
    ls!:列出包括“非列出缓冲区”的缓冲区
     
    列出的缓冲区信息
     
     
    缓冲区命令
     
    :windo cmd   在当前可见页的所有窗口中执行命令cmd,如果cmd报错,则停留在报错窗口
    :bufdo[!] cmd 在所有缓冲中(包括所有可见和不可见窗口)执行命令cmd,如果cmd报错,则停留在报错窗口


     
    标签:
    :tabnew  filename
    :tabclose/tabc
    :tabonly
    :tabn
    :tabp
    :tabd[o]
     
     
     
     
     
     
    VIM脚本
     
    所有命令和选项都是脚本的有效输入
    标准流控制(if...then....else,while)
    具有函数变量等
     
    变量的作用域与变量的名称有关系
     
     
    根据时间设置配色方案的例子
    let curhour = strftime("%H")
    echo "curhour is ".curhour
    if curhour < 6
         let colshm="darkblue"
    elseif curhour < 12
         let colshm="morning"
    elseif curhour < 18
         let colshm="shine"
    else
         let colshm="evening"
    endif
    echo "setting color scheme to ".colshm
    execute "colorscheme ".colshm (colshm是字符串和下面的直接命令选项不同,命令和命令选项可以直接执行,命令和字符串不可直接执行,需要使用execute命令将命令本身识别为字符串,然后在和后续字符串组成命令加选项的字符串执行)

    "let curhour = strftime("%H")
    "echo "curhour is ".curhour
    "if curhour < 6
    "     let colshm="darkblue"
    "elseif curhour < 12
    "     let colshm="morning"
    "elseif curhour < 18
    "     colorscheme shine
    "     echo "setting color scheme to shine"
    "else
    "     let colshm="evening"
    "endif
     
     
     
     
    定义函数
     
    定义函数:vim使用function  funcname(param1,param2,...)...endfunction定义函数(函数名称必须以大写字符开头)
    调用函数:call funcname(param1,param2,...)
     
     
    statusline可以自定义,在statusline发生变化时会重写,所以可以利用这一点,执行需要频繁检查的操作。
     
     
    重复检查
    let g:colorname = "xyzzy"
    "根据时间设置配色方案
    function Settimeofcolor()
         let curhour = strftime("%H")
         echo "curhour is ".curhour
         if curhour < 6
              let colshm="darkblue"
         elseif curhour < 12
              let colshm="morning"
         elseif curhour < 18
              let colshm="shine"
         else
              let colshm="evening"
         endif
         if g:colorname !~ colshm
              echo "setting color scheme to ".colshm
              execute "colorscheme ".colshm
         endif
    endfunction
     
    打开文件后
     
    set statusline+=\%{Settimeofcolor()}
     
    全局数组定义
     
     
    最终版本
     
    let g:colorname = "xyzzy"
    let g:colorarray=["darkblue","morning","shine","evening"]
    "根据时间设置配色方案
    function Settimeofcolor()
         let curhour = strftime("%H")
         echo "curhour is ".curhour
         let colshm=g:colorarray[curhour/6]
         if g:colorname !~ colshm
              echo "setting color scheme to ".colshm
              execute "colorscheme ".colshm
         endif
    endfunction
     
     
    VIM自动命令
     
    '
     
    自动命令格式
     
     
    "&vim选项":取vim选项的值 eg: &filetype
    "exists(变量名或函数名)":检查变量或函数是否已经定义
                    eg:
                   if exists("b:iscount")==0
                        "如果没有定义变量b:iscount则定义并赋值
                        let b:iscount=0
                   endif
     
     
     
     
    文件类型自动检测脚本
     
    "定义新自动命令组
    augroup newFileDetection
    autocmd CursorMovedI * call CheckFileType()  "为组添加自动命令
    augroup END

    function CheckFileType()
    if exists("b:countCheck") == 0
    let b:countCheck = 0
    endifh
    let b:countCheck += 1
    " Don't start detecting until approx. 20 chars.
    if &filetype == "" && b:countCheck > 20 && b:countCheck < 200
    filetype detect
    " If we’ve exceeded the count threshold (200), OR a filetype has been detected
    " delete the autocmd!

    elseif b:countCheck >= 200 || &filetype != ""
    ”如果不需要自动命令,则通过取消组的自动命令来消除其对性能的影响
    autocmd! newFileDetection
    endif
    endfunction

     
     
    "      删除组 augroup! newFileDetection
     
     
    function SetCppPreSet()                        
            set cindent                            
            set foldmethod=syntax                          
            set foldlevel=10
            set foldcolumn=6
            syntax enable
            syntax on     
            set ai         
    endfunction                                    
                                                   
    autocmd BufReadPost *.cpp,*.h call SetCppPreSet()
     
    保存编辑会话  ":mksession sessionfile_name"
    载入会话:":source sessionfile_name"
     
    程序员扩展功能
    折叠
    ':mkview': 在创建了很多折叠的后,保存折叠
    ':loadview': 加载保存的折叠
     
     
    文件比较
    vimdiff file1 file2
     
     
    撤销与重做
    "U",撤销
    "ctrl+R"重做  //set undolevels=n 设置可以重做的深度
     
     
     
     
    在命令模式下(":") ctrl+f,打开历史命令窗口,查找和执行历史命令。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
        
  • 相关阅读:
    Ajax入门
    多线程入门(五)
    多线程入门(四)
    多线程入门(三)
    多线程入门(二)
    多线程入门(一)
    git使用简介
    Windows远程登录到VirtualBox安装的Ubuntu11.10
    阿里面试2(转)
    百度java开发面试题
  • 原文地址:https://www.cnblogs.com/manziluo/p/5789723.html
Copyright © 2011-2022 走看看