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,打开历史命令窗口,查找和执行历史命令。
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
        
  • 相关阅读:
    c#自动更新+安装程序的制作
    VS2013项目受源代码管理向源代码管理注册此项目时出错
    WinDbg配置和使用基础
    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
    PowerDesigner 如何生成数据库更新脚本
    用户故事(User Story)
    Troubleshooting Record and Playback issues in Coded UI Test
    Coded UI
    compare two oracle database schemas
    How to: Use Schema Compare to Compare Different Database Definitions
  • 原文地址:https://www.cnblogs.com/manziluo/p/5789723.html
Copyright © 2011-2022 走看看