备注:
VimScript是一门十分小众的语言,基本上只能用于Vim配置的书写以及Vim插件的开发
其只能写入.vimrc中生效
写在前面,VimScript中,=左右不要预留空格,C语言的风格会使VimScript的语法出错
Vim的命令是在vim中及vimrc中可以通用的
vimrc中的命令,是不需要加上:的,而且有些vim的命令是与shell命令相同的.在vim中使用的命令记得加上:,不然是无法输入的
1. 打印信息:
:echo
显示信息
:echom(sg)
同样显示信息,但是会将信息保存,可以调用:message显示
:message
显示那些保存的信息
2. 注释:
使用 "
进行注释 (本句话已经变成一条注释了),同理其他脚本语言,到行尾都是注释
3. 设置选项:
主要依靠布尔选项以及键值选项
- 布尔选项
举个例子: number选项为布尔选项,可以on也可以off
:set number
命令打开(on)
:set nonumber
命令关闭(off)
所有的布尔选项都是这样使用
:set <name>
打开选项
:set no<name>
关闭选项
- 切换布尔选项
在布尔选项后面添加”!”即可实现对布尔选项的切换
:set number!
打开->关闭/关闭->打开
- 查看选项当前值
之前提到布尔选项,那么如何查看当前布尔选项的值.
:set number?
即可查看当前的选项值
- 键值选项
有的选项并不是仅仅只有on/off两个值,还存在其他的值,这个时候就需要进行值的设定了
比如:行号的列宽
:set numberwidth = 10
:set numberwidth = 8
上面的例子,都是使用
键值来进行选项的设定
:set <name>=<value>
可以进行布尔选项内容的切换
- 一次性进行多个选项的设定
VimScript是支持一次性设置多个选项的
举个例子:
同时设置行号选项与行号宽度
:set number numberwidth=4
交换顺序也是可以的
4.键盘映射
如果说VimScript可以进行自己个性化的Vim设置,那就非键盘映射莫属了,这真TM是个神奇的功能
键盘映射:按下这个键的时候,放弃默认操作,执行我指定的操作
- 基本映射(normal模式)
简单的语法:
map 键 想要映射的功能
举个例子:
map - dd
- 可以进行整行内容的删除
- 特殊字符的映射
不仅可以映射简单地字符,还可以进行特殊按键的映射,即组合键,十分方便
语法:
map <keyname> 映射的功能
举个例子:
map <space> viw
同时可以使用Ctrl以及Alt作为映射键
但是注意,只能写<c-?> 或者 <a-?>进行映射,完整的ctrl/alt名称是不能进行映射的
建议映射的键:
< F2 > - < F 12 >
shift + ? <s-?>
之后进行的映射会刷新之前的映射
同时,映射可以连接起来使用
map - ddp
可以实现将本行粘贴在下一行的功能map
在任何模式都通用
nmap imap vmap
分别对应在normal,insert,visusal三种模式下指定的映射
在normal以及visusal模式下的映射正如上面所讲
insert模式的映射就比较特殊了,需要特殊对待
因为insert比较特殊,例如要进行删除当前行,输入
所以要借助,
imap <c-d> <esc>dd
对于此映射还可以加强,即最后需要回到本模式
imap <c-d> <esc>ddi
最后的i字符说明回到insert模式
- 精确映射
在VimScript的映射中,会出现递归的问题
很可怕,可能你的映射会被解释为其他的映射
这个时候,精确的映射就很重要了
那么如何解决递归映射的问题呢?
使用*noremap*
系列映射
noremap nnoremap
,inoremap
,vnoremap
,
这四种便是映射的非递归版本,
什么时候使用呢?
任何时候,没错,任何时候
- 前缀映射
映射一般都选用不常用的键,但是你不常用的键并不多,难道Vim的可定制化传说是骗人的?
并不是,可以使用前缀映射
nmap -d dd
可以实现按两个键完成dd的映射
但是,这么多前缀改着不累吗?
所以,我们采用设置leaders的方式进行定义
let mapleader = "leader"
*map <leader>*** 映射的功能
使用 < leader > 的作用,不用我多说,你也明白,不是吗?
同理还可以使用localleader,会在之后进行详解
下次会有更为有趣的内容