zoukankan      html  css  js  c++  java
  • vimrc语法

    前言

    工欲善其事,必先利其器。一个programmer必然要先有一个好的editor。vim就是一个十分强大的编辑器。它的强大之处,在于其个性化和可定制。学习vim,就像学习Linux,学习perl,你发现你可以让它来适应自己,你发现你只需要学一点点就可以工作了;而当你继续学习下去,你会惊奇的发现它的“新”功能能够极大的提高你的工作效率;就是这样,你学习的兴趣将始终超过学习的难度,因此促使你一直钻研下去……另外一点,你总是可以找到vim,至少是vi,可是你可能不会在你的公司的Sun机器上找到记事本,也可能不会在AIX上找到emacs——除非你是root,你可以自己装一个:)我无意把vim和其他编辑器比较,我只知道Larry Wall用vim。言归正传,个性化vim最基本也是最重要的就是编写vimrc文件(不要说你不知道vimrc在哪里,它就在你的home目录下,名字叫做.vimrc)。

    1. 注释
    写程序之前,第一件事情不是了解语法,而是知道如何写注释。
    vimrc脚本的注释是使用引号(")作行注释。

    2. 变量
    (1) 标量变量
    可以是数字或字符串,基本与perl相同。
    命名方式为:作用域:变量名,常用的有如下几种:
    b:name —— 只对当前buffer有效的变量
    w:name —— 只对当前窗口有效的变量
    g:name —— 全局变量
    v:name —— vim预定义变量
    a:name —— 函数的参变量
    注意:引用标量变量的时候请包含作用域和冒号

    (2) 一类有特殊含义的变量
    命名方式:Fun Character(这个词请参看Programming Perl)加上变量名
    共有三类:
    $NAME —— 环境变量(一般变量名都是大写)
    &name —— 选项(vim处理某些事情的时候的默认设置)
    @r —— register(寄存器,不是汇编的EAX,EBX,看第2部分vim tips)
    常见环境变量例子:$VIMRUNTIME —— vim运行路径
    常见选项例子:&ic —— ignorecase
    注:使用set命令可以改变选项设置,例如:
    :set ignorecase
    使用一个set命令可以看到当前所有的选项及其设置。

    (3) 变量赋值
    :let 变量名=值
    注意:最前面的冒号不仅是为了表示这是一个冒号命令,而且是必须的。

    释放变量::unlet! 变量名

    (4) 运算符(和perl基本一样)
    数学运算:+ - * / % .
    逻辑运算:== != > >= < <= ?:
    正则匹配运算符=~ !~

    3. 控制结构
    (1) if 条件
    语句块
    elseif 条件
    语句块
    else
    语句块
    endif
    注意:条件表达式不需要小括号,语句块不需要大括号

    (2) while 条件
    语句块
    [break/continue]
    endwhile

    4. 函数:

    定义:
    function 函数名(参数)
    函数体
    endfunc

    调用:
    在脚本语句中使用 call 函数名(参数)
    在vim命令中使用 :call 函数名(参数)

    注:在函数体中使用参数需要在参数变量名称前加上a:,例如参数名为
    keyword,
    则函数体中使用a:keyword来引用

    注:常用系统函数 参见【附】。

    5. 执行命令,键盘绑定,命令行命令和自动命令
    (1) 执行命令
    exec "命令" —— 用于在vim脚本中执行一系列vim命令
    :!外部命令 —— 这是一个vim命令行命令,功能是调用外部程序
    (2) 键盘绑定 :help map-overview
    vim最大的特点在于可以把所有的操作能够用一个命令字符串表达出来,
    因此这带来了编写脚本的最大的便利。键盘绑定就是一个例子,这个功能允许
    把一个命令字符串绑定到一个按键/按键组合。

    一般格式:映射命令 按键组合 命令组合
    例子:nmap c ^i#<Esc>j
    解释:映射normal模式下的按键c为:^i#<Esc>j,就是在该行开头加上#号
    ,然后下移一行

    常用映射命令:
    map :全模式映射
    nmap :normal模式映射
    vmap :visual模式映射
    imap :insert模式映射

    (3) 命令行命令
    vim支持在启动的时候使用-c开关执行命令字符串,例如:
    $ cat n
    #!/bin/sh
    vim -c "set filetype=$PERL" -c "s.$.#!/usr/bin/$PERL -w"r"r." -c
    ":nohlsearch" $1
    设置文件类型 写入#!/usr/bin/perl -w
    取消匹配加亮
    $ n myperlfile
    (4) 自动命令
    一般格式:autocmd 事件 文件类型 命令
    例子:au BufNewFile,BufRead *.pl setf perl
    解释:当事件 BufNewFile 和 BufRead 发生在 *.pl 文件上的时候,
    执行命令:setf perl

    ========================================================================
    【附】常用系统函数 :help function-list

    函数 返回值 解释

    (1)字符串操作
    char2nr( {expr}) Number {expr}中字符的ASCII值
    nr2char( {expr}) String {expr}中ASCII值对应的字符
    escape( {string}, {chars}) String 使用'"'对{string}中的字符
    {chars}进行转义
    strtrans( {expr}) String 把字符串转换成可打印字符串
    tolower( {expr}) String 将字符串{expr}小写
    toupper( {expr}) String 将字符串{expr}大写
    match( {expr}, {pat}[, {start}])
    Number {pat}在{expr}中的匹配位置
    matchend( {expr}, {pat}[, {start})
    Number {pat}在{expr}中的最后匹配位

    matchstr( {expr}, {pat}[, {start}])
    String {pat}在{expr}中的匹配,成功
    返回{pat},失败返回""
    stridx( {haystack}, {needle}) Number {needle}在{haystack}中的始
    索引位置
    strridx( {haystack}, {needle}) Number {needle}在{haystack}中的终
    索引位置
    strlen( {expr}) Number 字符串{expr}的长度
    substitute( {expr}, {pat}, {sub}, {flags})
    String 用{sub}替换{expr}中的模式
    {pat}
    submatch( {nr}) String ":substitute"的特殊匹配
    strpart( {src}, {start}[, {len}])
    String 子串函数,在{src}中从
    {start}开始取出{len}个字符
    expand( {expr}) String 扩展{expr}中的字符串
    type( {name}) Number 变量{name}的类型

    (2)操作当前缓冲区中的文本
    byte2line( {byte}) Number 字节数为{byte}的行
    line2byte( {lnum}) Number 行号为{lnum}的行的字节数
    col( {expr}) Number {expr}的列号:. 光标所在列
    $ 末列 "x 标记x所在位置
    virtcol( {expr}) Number {expr}的屏幕列号(screen
    column)
    line( {expr}) Number {expr}的行号
    wincol() Number {expr}的窗口列号(screen
    column)
    winline() Number {expr}的窗口行号(screen
    column)
    getline( {expr}) Number {expr}的行号
    setline( {lnum}, {line}) Number 把{line}写入{lnum}行
    append( {lnum}, {string}) Number 在{lnum}行下一行加入
    {string}
    indent( {lnum}) Number 缩进行{lnum}
    cindent( {lnum}) Number C格式缩进行{lnum}
    lispindent( {lnum}) Number Lisp格式缩进行{lnum}
    nextnonblank( {lnum}) Number 行号 >= {lnum} 的非空白行的
    行号
    prevnonblank( {lnum}) Number 行号 <= {lnum} 的非空白行的
    行号
    search( {pattern} [, {flags}]) Number 查找{pattern}
    searchpair( {start}, {middle}, {end} [, {flags} [, {skip}]])
    Number 查找 始/末对 的另一个末端


    (3)系统函数和文件操作
    browse( {save}, {title}, {initdir}, {default})
    String 启动一个文件请求
    glob( {expr}]) String 展开一个fileglob {expr}
    globpath( {path}, {expr}) String 对{path}中的所有目录调用
    glob({expr})
    resolve( {filename}) String 得到符号链接的指向
    fnamemodify( {fname}, {mods}) String 更改文件名
    executable( {expr}) Number 如果{expr}存在且可执行,则

    filereadable( {file}) Number 如果{file}可读,则真
    isdirectory( {directory}) Number 如果{directory}存在,则真
    getcwd() String 当前工作目录
    getfsize( {fname}) Number 文件字节数
    getftime( {fname}) Number 文件最终修改时间
    localtime() Number 当前时间
    strftime( {format}[, {time}]) String 格式化的时间
    tempname() String 生成一个临时文件名
    delete( {fname}) Number 删除文件{fname}
    rename( {from}, {to}) Number 重命名{from}成{to}
    system( {expr}) String 执行shell命令{expr}
    hostname() String 机器名

    (4)缓冲区,窗口,参数列表
    argc() Number 参数列表中的文件个数
    argidx() Number 参数列表中当前索引值
    argv( {nr}) String 参数列表中第{nr}个
    bufexists( {var}) Number 如果{var}存在则真
    buflisted( {expr}) Number 如果{expr}被列出则真
    bufloaded( {expr}) Number 如果{expr}被加载则真
    bufname( {expr}) String 缓冲{expr}的名字
    bufnr( {expr}) Number 缓冲{expr}的缓冲序号
    winnr() Number 当前窗口的窗口序号
    bufwinnr( {expr}) Number 指定缓冲的窗口序号
    winbufnr( {nr}) Number 指定窗口的缓冲序号
    getbufvar( {expr}, {varname}) 得到缓冲{expr}的特殊变量
    {varname}的值
    setbufvar( {expr}, {varname}, {val}) 设置缓冲{expr}的特殊变量
    {varname}的值为{val}
    getwinvar( {nr}, {varname}) 得到窗口{nr}的特殊变量
    {varname}的值
    setwinvar( {nr}, {varname}, {val}) 设置窗口{nr}的特殊变量
    {varname}的值为{val}

    (5)折叠(Folding)
    foldclosed( {lnum}) Number 如果{lnum}行的折叠闭合了,
    返回第一行
    foldlevel( {lnum}) Number {lnum}行的折叠级数
    foldtext( ) String 生成一个闭合折叠的表示

    (6)语法加亮
    hlexists( {name}) Number 如果命名为{name}的高亮组存
    在,则真
    hlID( {name}) Number 名字为{name}的高亮组的语法
    ID
    synID( {line}, {col}, {trans}) Number {line}行{col}列的语法ID
    synIDattr( {synID}, {what} [, {mode}])
    String 返回语法ID {synID}的{what}
    属性
    synIDtrans( {synID}) Number 翻译的语法ID {synID}

    (7)历史
    histadd( {history},{item}) String 向历史中增加一项
    histdel( {history} [, {item}]) String 在历史中删除一项
    histget( {history} [, {index}]) String 在历史中取出索引{index}的项
    histnr( {history}) Number 历史项最大索引

    (8)交互
    confirm( {msg} [, {choices} [, {default} [, {type}]]])
    Number 返回用户选择的项序号
    getchar( [expr]) Number 获得一个输入字符
    getcharmod( ) Number 修改最后一个输入的字符
    input( {prompt} [, {text}]) String 获得用户输入
    inputsecret( {prompt} [, {text}]) String 获得用户输入,但是不回显
    inputdialog( {prompt} [, {text}]) String 产生一个GUI对话框以获得用
    户输入

    (9)Vim服务器
    serverlist() String 返回一个可用的服务器列表
    remote_send( {server}, {string} [, {idvar}])
    String 送出key序列

    remote_expr( {server}, {string} [, {idvar}])
    String 送出表达式
    server2client( {serverid}, {string})
    Number 送出回复串
    remote_peek( {serverid} [, {retvar}])
    Number 检查回复串
    remote_read( {serverid}) String 读取回复串
    foreground( ) Number 把vim窗口带到前台
    remote_foreground( {server}) Number 把vim服务器带到前台

    (10)变量检查
    mode() String 返回当前编辑方式
    visualmode() String 返回最后一次visual模式的使

    hasmapto( {what} [, {mode}]) Number 如果存在{what}的映射则真
    mapcheck( {name}[, {mode}]) String 检查所有被{name}匹配的映射
    名称
    maparg( {name}[, {mode}]) String 在模式{mode}下的映射{name}
    的rhs值
    exists( {var}) Number 如果{var}存在则真
    has( {feature}) Number 如果特性{feature}被支持则真
    cscope_connection( [{num} , {dbpath} [, {prepend}]])
    Number 检查是否存在cscope连接
    did_filetype( {name}) Number 设置文件类型的自动命令
    {name}存在则真
    eventhandler( ) Number 如果在一个事件处理中则真
    getwinposx() Number vim窗口在GUI模式下的X轴坐标
    象素数
    getwinposy() Number vim窗口在GUI模式下的Y轴坐标
    象素数
    winheight( {nr}) Number 窗口{nr}的高度
    winwidth( {nr}) Number 窗口{nr}的宽度
    libcall( {lib}, {func}, {arg}) String 使用参数{arg}调用在{lib}中
    的函数{func}
    libcallnr( {lib}, {func}, {arg})
    Number 和上一个函数相同,用于返回
    整数的函数
  • 相关阅读:
    zookeeper03
    微服务网关Zuul
    微服务网关概述
    服务熔断Hystrix高级
    服务熔断Hystrix入门
    微服务架构的高并发问题
    服务注册和发现总结
    服务调用Feign高级
    服务调用Feign入门
    负载均衡Ribbon高级
  • 原文地址:https://www.cnblogs.com/biglucky/p/4511537.html
Copyright © 2011-2022 走看看