vimbook-OPL(24-25)
Contents
vimbook-OPL(24-25)
CH24 键盘映射
24.1 缩写的相关命令
:abbreviate @a fresh
添加 @a 为 fresh 的缩写,在插入模式按键 @a 并按 <ESC> 将插入 fresh 字符串;
:unabbreviate @a
将删除 @a 的缩写;
:abclear
将所有缩写都删除;
以上形式定义的缩写将在插入模式和 Ex 命令模式都会展开。如果想仅在插入模式展开,调用 :iabberviate @a fresh
设置仅在插入模式生效的缩写,:iunabbreviate @a
清除请在插入模式生效的缩写,:iabclear
清除所有在插入模式下的缩写。仅在命令模式下的缩写为 :cabbreviate
:cunabbreviate
以及 :cabclear
。
:abbreviate
将显示所有的缩写,首列为缩写的工作模式:c 表示在命令模式下,i 表示在插入模式下,! 表示两种模式皆有。 在插入模式调用 CTRL-]
将强制进行缩写扩展。而 CTRL-C
将在不检查缩写扩展的情况下退出插入模式。
24.2 映射和模式
映射时可以指定映射的模式,用 :vmap
将仅在可视模式下进行映射,:nmap
仅在normal模式下映射,:map!
将在插入模式和 Ex 模式下映射,:imap
将仅在插入模式下映射。:cmap
将仅在 Ex 模式下映射。在指定映射时,必须是用 CTRL-V CTRL-A 才能生成 ^A 这样的 Vim 内部表示,注意这不是 ^ 和 A 的组合。而:map
则在normal、可视模式下进行映射。
:unmap
则将原来的映射给取消,这在某些时候有用。:mapclear
则取消所有的映射。:map
在不带参数的情况下列举所有的映射,列举出来分为三列,每列有不同的含义,具体查看相应的文档。
默认情况下 Vim 中的映射时循环映射,调用 :set noremap
进行关闭。
CH25 Ex 命令
Ex 命令就是用 : 打头的命令。指定行的范围有多种方式。比如::range delete register count
在 range 中删除 count 行,count: delete
从当前行开始删除 count 行,:line delete count
从 line 行还是删除 count 行。还可以用正则表达式来指定行的范围,具体::/hello/,/goodbye/ delete
将删除从包含 hello 的行一直到包含 goodbye 的行。特殊的模式匹配:\/
前向搜索上一个模式 \?
回溯搜索上一个模式 \&
前向搜索上次的替换模式。:/first//second/ delete
将在搜索到 first 之后再继续搜索 second ,从那里开始删除。:7/first/
从第7行开始搜索 first 所在行。
总而言之,Ex在指定操作的行范围上有非常大的灵活性。
这本书里边讲了一些之前我没用过的命令,在此记录一下:
:range copy address
将 range 范围的文本行复制到 address 位置。
:range move address
将 range 范围的文本行移动到 address 位置。
对写代码有用的 Ex 命令
:range ijump count [/]pattern[/]
对 C/C++ 程序非常有用,在当前文件和 #include 包含的文件中搜索 pattern ,如没有包含双斜线则按字面意思搜索,如果有的话就按正则表达式搜索。如::ijump /define\s*EOF/
将搜索到 “# define EOF (-1)” 这样的文本。:ilist
类似于 ijump 一样搜索,但是不跳转而是列举;:isearch
将列举第一个匹配,:isplit
搜索分割并跳转;
另外还有宏定义跳转,如::djump [/]name[/]
跳转到 name 宏定义所在行,:dsplit
:dlist
:dsearch
都类似于上面的命令功能,除了是查找宏定义。
目录文件相关的命令
:cd
:pwd
类似于 Linux 下的同名命令功能。:file
命令可以知道当前编辑的是哪个文件,如果指定新的文件名,则当调用 :w
时将会把内容保存到新的文件名所指示的文件中去。
在 Ex 模式下还有许多个命令是模拟命令模式下的,如::startinsert
类似于 i
,:yank
类似于 y
命令。
:history
命令可以显示所有执行过的命令。要执行之前的命令有一个很好的方式,按下 : 然后用向上键进行回溯执行。
CH27 表达式和函数
Vim 有一个插件语言叫 Vimscript,用来写 Vim 的各种插件来丰富 Vim 的功能。这本书没怎么将这一块,主要还是在将如何在 Vim 中操作,简单描述了 Vimscript 中的变量、常量、表达式和函数,包括一整个内建函数表。我这里只讲一下变量,因为这个变量跟我们在常规的编程语言中的变量还有点不一样。
只由大写字母、数字和下划线构成的变量可以保存在 viminfo 中;首字母大写的变量可以保存在 session 中;只包含小写字母的变量退出时不做保存;
$var
这个变量将会成为 Vim 的环境变量。@var
这个变量将会成为寄存器。&var
这个变量将会表示 Option。b:name
此变量只在当前缓冲中可见。w:name
此变量将会成为窗口的本地变量。g:name
此变量将会成为全局变量;a:name
此变量是函数的参数;v:name
此变量是 Vim 内部使用的变量。
以上变量具体如何用,说实话我没有深入去了解,因为暂时用不上,而且这本书没怎么讲清楚。有个 Learn Vimscript the hard way 的教程把如何写 Vimscript 描述的非常好,有兴趣可以搜索下。
在此仅介绍下 v:name 的一些变量,这是 Vim 内部定义的变量。v:version 是当前的版本号。v:this_session 最后一次使用到的 session 文件名。v:statusmsg 状态消息;v:errmsg 最后一条错误消息;v:warningmsg 最后一条警告消息;
另外,Vim 中还定义了一些可扩展的特殊字符串,如 ‘%’ 表示当前文件名,’#’ 表示 Alternate 文件名,<cword>
光标下的单词,<cWORD>
光标下的字串,留意 word 和 WORD 的区别。<cfile>
光标下的文件名。
关于如何定义函数,以及使用 Vimscript 本身,此文不打算讲。主要还是集中在书上的内容。
:function
命令将列举所有用户自定义的函数;
:function {name}
命令将展示整个函数定义;
:delfunction {name}
将删除一个函数,{name} 是函数的名字;
Author zoro.wang
LastMod 2018-02-27