• Home
  • About
    • Road to Coding photo

      Road to Coding

      只要那一抹笑容尚存, 我便心无旁骛

    • Learn More
    • Email
    • Github
  • Posts
    • All Posts
    • All Tags

VimScript的学习(一)

17 Oct 2017

备注:


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比较特殊,例如要进行删除当前行,输入却只能输入两个d字符

所以要借助,的功能

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,会在之后进行详解

下次会有更为有趣的内容



VimScript Share Tweet +1