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 和上一个函数相同,用于返回
整数的函数
vimrc语法的更多相关文章
- Linux 下 Vi 配置文件 .vimrc 文件
Linux 下 Vi 配置文件 .vimrc 文件 配置 vim 的方法是在用户主目录下建立个.vimrc文件,我一般使用root帐户,所以就在/root/下建立一个.vimrc文件:vi /root ...
- Vim的行号、语法显示等设置(.vimrc文件的配置)以及乱码解决
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进 等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc.在启动vim时,当前用户 ...
- VIM C++语法高亮配色
因工作需求,必须在终端下远程下代码,vim打开cpp/h文件,看到一连串的字母就傻了,根本无法阅读. 后来才知道VIM这高大上的文本编辑器支持很多的功能,很多的功能.首先最基本的就是语法高亮配色 1. ...
- ubuntu 配置vim(vimrc)
打开终端:ctrl+alt+t 进入vim文件:cd /etc/vim 打开vimrc文件:sudo gedit vimrc 然后在行末if语句前加上下面的内容," 这个符号为注释,后面内 ...
- vim显示行号、语法高亮、自动缩进的设置
转载自:http://blog.csdn.net/chuanj1985/article/details/6873830 在UBUNTU中vim的配置文件存放在/etc/vim目录中,配置文件名为v ...
- vi/vim使用进阶: vimrc初步
本节所用命令的帮助入口: :help compatible :help mapleader :help map :help autocmd 当vim在启动时,如果没有找到vimrc或gvimrc,它缺 ...
- Mac下Vim配置语法高亮
设置终端的字体颜色 如图,打开终端然后,选择偏好设置,再选择描述文件,再窗口左侧可以选择系统配置好的,或者你也可以自定义,最后别忘了把你的配置设置成默认就行 Vim语法高亮设置 只需要找到vimrc配 ...
- mac/linux中vim永久显示行号、开启语法高亮
步骤1: cp /usr/share/vim/vimrc ~/.vimrc 先复制一份vim配置模板到个人目录下 注:redhat 改成 cp /etc/vimrc ~/.vimrc 步骤2: vi ...
- centos vim配置高亮语法和格式化粘贴
centos vim配置高亮语法和格式化粘贴 设置vim别名和高亮grep词语 echo -e "\nalias vi=vim\nalias grep='grep --color'\n&qu ...
随机推荐
- 使用python发送简单的邮件
from:http://blog.csdn.net/zhaoweikid/article/details/125898 前些时间,论坛上有人讨论怎么用python发送需要认证的邮件,我在我的FreeB ...
- linux/win7下安装websphere application server
说明: 1.参考网址:http://www.ibm.com/developerworks/cn/aix/library/au-wasonlinux/ 2.在ibm官网上下载websphere appl ...
- ASP.NET MVC5 easyui 之 treegrid 初用记录
菜鸟初次使用,参考论坛中介绍的方法仍走了一些弯路,把自己遇到的问题记录下来. 1.必须定义根节点: 2.根节点一个或多个均可: 4.根节点的父节点属性不必定义,或者定义为0: 5.各级子节点的父节点属 ...
- input表单
submit:点击submit按钮表单就会被提交给服务器,中文IE下默认按钮文本为“提交查询”,可以设置value属性修改按钮的显示文本 text:size属性为宽度,value为值,maxlengt ...
- 微信分享功能引入页面-控制分享时候调用的标题、图片、url和微信按钮隐藏显示控制
1.设置分享调用的标题.图片.url预览. 2.控制右上角三个点按钮的隐藏显示(和底部工具栏的显示隐藏--未测试). 3.判断网页是否在微信中被调用. <!doctype html> &l ...
- 前端工程的构建工具对比 Gulp vs Grunt
1. Grunt -> Gulp 早些年提到构建工具,难免会让人联想到历史比较悠久的Make,Ant,以及后来为了更方便的构建结构类似的Java项目而出现的Maven.Node催生了一批自动化工 ...
- php图片上传代码
使用copy函数 if (!empty($_FILES)) { //图片 if(isset($_FILES['image'])) { $img_data = $_FILES['image']['tmp ...
- 面试题:m个长度为n的ordered array,求top k 个 数字
package com.sinaWeibo.interview; import java.util.Comparator; import java.util.Iterator; import java ...
- SAR ADC简介
SAR型 (逐次逼近型) 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨率ADC市场.SAR ADC的采样速率最高可达5Msps,分辨率为8位至18位.SAR架构允许高 ...
- mysql数据库中某项其中一个值在该项排第几,百分几
SQL 如下: sql 1. SELECT X.USER_ID, X.TOTAL_NO, X.ORDER_NO, X.ORDER_NO / X.TOTAL_NO AS PERCENTAGE_NO AS ...