VimScript基础学习(一)

以下内容为学习VimScript时的记录,如果有兴趣,建议阅读原文。

1. 创建~/.vimrc文件

.vimrc是vim默认的配置文件,一般位于home目录下,在vim启动的时候回默认加载此文件,来初始化vim。

在vim中执行以下命令可获取当前vim实际加载的配置文件的路径:

:echo $MYVIMRC

2. :echo:echom

在vim中执行:echo或者:echom命令可以输出信息到vim底部,类似于c中的printf

执行如下命令,可以在vim底部打印出hello world!

:echo "hello world!"

:echo:echom两个命令的区别在于:后者打印出出来的信息会保存下来,在vim中执行:messages即可查看到打印的历史信息,如果有较为复杂的vim脚本逻辑,使用:echom则方便调试

理解:

到这里应该有一个概念,.vimrc中的配置文件都是基于vimscript脚本的,上述的两个命令其实就是脚本中的两个基础命令。vim底部的:操作则类似于vimscript实时执行的的控制台,

3. 注释

vimscript中的注释使用", 如下:

" 这是一行注释
echo "hello world!"

4. 使用help命令

在vim中,可以使用help命令查看任何其他命令的详细文档,如下:

:help echo
:help echom
:help messages

5. 设置选项

vim中有很bool类型的选项,比如是否显示行号的选项 number,在vim中执行:set number即可开启行号的显示,接着执行:set nonumber即可关闭行号的显示。

凡是表达是否的选项,都是可以使用:set <name>开启,:set no<name>关闭。

尝试依次执行如下命令:

:set number
:set number!
:set number?
:set number!
:set number?

输出如下:

1. 开始行号显示
2. 关闭行号显示
3. vim底部显示nonumber
4. 开启行号显示
5. vim底部显示number

!操作符可以对bool类型的配置选项取反。?操作符则可以获取当前选项的值。因此,上述操作一次为:开启行号->关闭行号->获取nonumber->开启行号->获取number

除了bool类型的开关选项之外,还有很多可以取多个值的选项,比如numberwidth【显示行号的宽度】选项。

执行:set numberwidth=6即可将行号的显示宽度设置为6,当然你可以根据自己的喜好设置为其他的数字。所以,其他类似的配置选项都可以使用如下命令来进行设置。

:set <name>=<value>

?操作符对这些设置选项同样有效,如获取选项matchtime的值:

:set matchtime?

在实际的配置中,一次set可以对多个选项进行设置,如下:

:set number numberwidth=5

6. 基础映射

vim被很多人喜欢的原因就是高度的自定义。vimer可以按照自己的喜欢,对vim进行各种各样的配置,来提高自己的工作效率。这其中,最常用的的功能就是键位映射。

:map - x

执行完上述命令,在vim中选中一个字符,按下-键,选中的字符消失了,如同按了x快捷键。所以,map命令可以实现键位上的映射,以此来达到快捷键的自定义。

所以,如果你想在按下-的时候,删除光标所在的行,就可以执行:map - dd,当按下-的时候,就等同于按下dd,光标所在的行就会被删除。再比如,执行map - viw,这个时候按下-就会高亮选中当前光标所在的整个单词。

这个时候你可能想这么操作:

:map <space> viw " select a word

完事儿,按下空格键可能不会按照原来设想的行为执行。vim会解析为:
viw<space>"<space>select<space>a<space>word

所以注意,不要在map所在行添加注释,此时"及其后面的内容并不会被解析为注释。

7. 模式映射

到这里你可能会发现,map的映射除了normal模式之外,在visual模式也同样起作用。
如果只想让命令在指定的模式下生效,可以使用模式映射命令分别为:nmap,vmap,imap三个命令,对应为normal,visual,insert三种模式。

nmapvmap的行为符合我们直觉上操作,imap则有一点点特殊。

:imap <c-d> dd

执行上述命令,我们的期望是:在insert模式下,按下Ctrl + d ,删除光标所在行。但是实际的情况是:输入了dd。原因是vim此时在insert模式下,dd并不能删除当前行,只是输入了两个d字母。

imap只能确保映射的命令在insert的模式可以被执行,但是具体被映射的命令在insert模式下执行情况是怎样的,需要考虑具体的情景。

所以,想要在insert模式下:按下<C-d>来删除光标所在的行,需要如下的映射:

:imap <c-d> <esc>ddi

很容易理解:<esc>确保回退到normal模式,dd删除当前行,i再进入insert模式。

  1. 精准映射

目前为止掌握的*map如下:

  • map
  • imap
  • nmap
  • vmap

尝试如下映射:

:nmap - dd
:nmap / -

第一行命令将-映射为dd,第二行命令将/映射为-。此时按下/发生什么?答案是删除了当前光标所在的行。因为/被解析为-,但是-又被映射为了dd,所以就执行了删除当前行的操作。因此*map有一个致命的问题就是会导致递归映射。这在实际中是非常麻烦的,因此在实际映射中通常建议使用精准映射:*noremap

在实际的映射中,建议任何时候都使用精准映射:noremap,nnoremap,vnoremap,inoremap

执行如下命令:

:nnoremap x dd
:nnoremap - x

此时按下-会忽略xdd的映射,只会单纯的执行x原来的行为,也就是剪贴当前字符。

至此学到的map命令:

  • map
  • nmap
  • vmap
  • imap
  • noremap
  • nnoremap
  • vnoremap
  • inoremap

在脑子里回忆下这些map命令之间的区别。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,848评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,529评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,824评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,329评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,227评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,879评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,218评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,877评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,159评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,155评论 2 315
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,987评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,736评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,273评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,407评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,663评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,158评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,517评论 2 339

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,668评论 0 11
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,351评论 0 5
  • macvim配置 最终效果如下: 系统环境 macos10.12.4 homebrew1.2.1 python3....
    Like_eb56阅读 69,212评论 5 65
  • 1 - 阅读感悟 (1)十五章是第三部分maturity的第一章,这章写苏东坡经历了逮捕入狱审判,降职减薪后,环境...
    ElaineLKN阅读 223评论 0 0
  • 2018.3.21 周三 晴 这几天有点忙,总觉得自己有忙不完的事,还有个小捣蛋货跟...
    念希0531阅读 175评论 0 2