原文地址:http://randomclan.blog.163.com/blog/static/14530098201292313539181/
定义新命令
学习Vim脚本,最快键的方式是从编辑~/.vimrc
入手。为了快速试验效果,在~/.vimrc中添加一行语句:
nmap <F12> :source ~/.vimrc<CR>
这样每次修改~/.vimrc后,输入<F12>就能重新加载~/.vimrc,使新加入的脚本立即生效。
Vim键映射
先从Vim手册中的一个示例入手,目标是在文件末尾加入一行表示当前日期的字符串:
nmap <F2> GoDate: <Esc>:read !date<CR>kJ
以上命令的含义是:
- nmap,表示在Normal模式下的映射
- <F2>,表示Normal模式下按<F2>
- GoDate,首先是
G
跳转到文档末尾,o
进入Insert模式,Date:表示我们要输入的字符串。 - <Esc>,退出Insert模式。
- :read !date,执行date命令,并把命令输出追加到当前行之后。
- <CR>,表示回车。
- kJ,将光标上移一行(
k
),并合并上下两行(J
)。
再深入分析这条语句。在Vim中,同一个键(如上的<F2>)在不同模式下可以有不同的映射方式,通过Xmap
来控制,X表示Vim所在的模式。Vim定义了以下常见模式:
命令 | 说明 |
---|---|
:map | Normal, Visual, Operator-pending |
:nmap | Normal |
:imap | Insert |
:vmap | Virtual |
:omap | Operator-pending |
上表Operator-pending表示一种悬而未决的状态,例如输入d或y希望删除或复制字符串或文本对象时,此时Vim在等待你继续输入,即为Operator-pending状态。定义:
:omap <F7> a{
这样,在C语言中,把光标移到{上,输入d<F7>,就能删除一个C语句块(包括{}和它们之间的文本),而y<F7>就能复制整个代码块。
直接输入:map
可以看到当前定义的所有键映射。
<F2>这样的写法叫括号表示法,用这种记法来代表特殊键。常见的特殊键
键值 | 说明 |
---|---|
<CR> | 回车 |
imap <F2> <CR>Date: <Esc>:read !date<CR>kJ
关键字
- let
- let声明定义变量
let name = "domain" let height = 165 let interests = ['berlinix', 860] let phone = {'name':'berlinix', 'age':25}
- 变量范围
- g:varname - 全局变量
- let声明定义变量
函数
常用函数
:echo bufname('%')
: 获取当前文件名(带全路径):echo expand('%')
: 获取当前文件名(带全路径):echo expand('%:t')
: 获取当前文件名
escape()
{{{ escape({string}, {chars}) }}}
例如:
:echo escape('c:\program files\vim', ' \')
输出
c:\\program\ files\\vim
line()/getline()
line()
获取行号,例如line(".")
getline()
获取行内容,例如getline(line("."))
获取光标所在行。