星期二, 七月 03, 2018
星期一, 七月 02, 2018
VIM学习笔记 工具栏 (ToolBar)
启用/禁用工具栏
工具栏(ToolBar)是使用图标来调用菜单的图形界面元素。Vim默认设置是显示工具栏的。我们也可以使用以下命令来显示工具栏:
:set guioptions+=T
使用以下命令,则可以隐藏工具栏:
:set guioptions-=T
工具栏选项
通过设置toolbar可以控制工具栏的显示外观,其选项包括:
- icons 显示工具栏图标
- text 显示文本
- tooltips 当光标悬浮图标上时显示提示文字
例如以下命令,将设置工具栏显示按钮图标和提示文字:
:set toolbar=icons,tooltips
工具栏按钮
Vim将工具栏视为一种以ToolBar命名的特殊菜单。例如名为ToolBar.New的menu-item,就是在工具栏上的New图标。每一个基本图标都有两个名字,例如New图标可以用ToolBar.New或是ToolBar.builtin00来表示。可以使用:help builtin-tools命令,查看关于基本图标的帮助信息。
新增工具栏按钮
可以使用以下命令,新增工具栏按钮:
:amenu icon=/Users/yyq/.vim/bitmaps/TabNew 1.410 ToolBar.TabNew :tabnew<CR>
- icon,icon=TabNew 用于指定按钮图标的文件名,如果你只给出了图标的文件名,但没有明确指明文件的路径名,那么Vim将会在
$VIMRUNTIME/bitmaps目录进行查找;如果你使用bmp格式的图标文件,那么不需要指明bmp后缀名; - priority,1.410 表示按钮在工具栏上的位置;
- action,:tabnew<CR> 是点击按钮所执行的命令。
可以使用以下命令,新增工具栏分隔符:
amenu 1.400 ToolBar.-sep8- <Nop>
使用以下命令,可以定义鼠标停留在按钮时显示的提示文字:
:tmenu ToolBar.TabNew Open a new tab
可以使用以下命令,移除工具栏按钮的提示信息:
:tunmenu ToolBar.TabNew
移除工具栏按钮
使用以下命令,将列示工具栏上的按钮名称:
:aunmenu ToolBar.<Tab>
使用左右方向键,可以选择某个图标项(其中,"|"用于表示分隔符), 按下Enter将从工具栏上移除此按钮,按下Esc则可以取消选择。
直接使用以下命令,将会移除工具栏上的所有按钮:
:aunmenu ToolBar
:set guioptions+=T | 显示工具栏 |
:set guioptions-=T | 隐藏工具栏 |
:set toolbar | 设置工具栏选项 |
:amenu | 新增工具栏按钮 |
:tmenu | 定义工具栏按钮的提示文字 |
:tunmenu | 移除工具栏按钮的提示文字 |
:aunmenu | 移除工具栏按钮 |
星期二, 六月 26, 2018
VIM学习笔记 菜单(Menu)
启用/禁用菜单
使用以下命令,可以显示菜单栏:
:set guioptions+=m
使用以下命令,可以隐藏菜单栏:
:set guioptions-=m
查看菜单映射
本质上,菜单项都是由命令定义的行为。使用以下命令,可以列出所有菜单定义的映射:
:menu
如果只需要显示特定的菜单(注意区分大小写),那么可以使用以下命令:
:menu File
命令执行结果的每一行首个字母指明了这个命令的模式。
而以下命令,则可以列出指定菜单项的内容:
:menu File.Save
定义新菜单
Vim编辑器所使用的菜单是由文件$VIMRUNTIME/menu.vim定义的。
可以使用以下:menu命令,定义新的菜单内容:
:menu [priority] menu-item command-string
menu-item,描述了放置菜单项的路径,比如File.Save表明Save菜单在File菜单下;还可以依次创建子菜单,例如Tabs.Navigation.Next。菜单定义命令示例如下:
:menu 10.340 &File.&Save:w :confirm w
priority,为数字优先级,用于确定放置菜单项的位置。第一个数字10表明在菜单栏上的位置。数字越小越靠近左侧,而数字越大则越靠近右侧;第二个数字340则决定了下拉菜单的位置。数字越小越靠近上部,而数字越大则越靠近下部。如果你在新建菜单命令中没有指定优先级数字,那么默认值为500。你可以使用:help menu-priority帮助命令,查看Vim内置菜单的位置排列。
&,用于指定快捷键,例如&File.&Save可以表明用Alt-F键来选择File菜单,而用S键来选择保存菜单。
使用以下命令,将新建Tabs.Next菜单:
:menu <silent>Tabs.Next <Esc>:tabnext<cr>
<Esc>,用于进入常规模式;<cr>用于执行命令。
<silent>,将屏蔽命令行的输出。
-SEP-,可以在下拉菜单中新建用于间隔菜单项的虚线。必须是以-开头和结尾的唯一名称;同时必须包含命令,例如以下定义中使用的:空命令。
:menu Tabs.-SEP- :
我们还可以使用以下指定模式的菜单定义命令:
:menu常规模式, 可视化模式, 操作待决模式:nmenu常规模式(Normal mode):vmenu可视化模式(Visual mode):omenu操作待决模式(Operator-pending mode):imenu插入模式(Insert mode):cmenu命令行模式(Command-line mode):amenu所有模式
菜单实例
如果希望始终显示自己新建的菜单,那么可以在vimrc文件中增加以下代码。请注意:代码不需要包括冒号(:)。
15amenu <silent>Tabs.New :tabnew<cr>amenu Tabs.-SEPT1- :
amenu <silent>Tabs.&Next :tabnext<cr>
amenu <silent>Tabs.&Previous :tabprevious<cr>
amenu Tabs.-SEPT2- :
amenu Tabs.&Close :confirm tabclose<cr>
新建的菜单显示如下:
移除菜单
使用以下命令,可以从菜单中移除指定菜单项:
:[mode]unmenu menu-item
使用以下命令,则会移除所有菜单:
:aunmenu *
:set guioptions+=m | 显示菜单 |
:set guioptions-=m | 隐藏菜单 |
:menu | 查看/新建菜单定义 |
:unmenu | 移除菜单 |
星期一, 六月 25, 2018
VIM学习笔记 鼠标(Mouse)
启用/禁用鼠标
使用以下命令可以启用鼠标(默认选项):
:set mouse=a
使用以下命令可以禁用鼠标:
:set mouse=""
鼠标选项
在Windows和X Window这两种系统中,使用鼠标的方式是不同的。我们可以定制Vim编辑器,以启用不同的鼠标行为。命令:behave xterm设置使用X Window风格的鼠标行为。而命令:behave mswin则启用Windows风格的鼠标行为。
| xterm的鼠标行为 | Windows的鼠标行为 | |
|---|---|---|
| 左键 | 移动光标 | 移动光标 |
| 拉动左键 | 在可视化模式下选择文本 | 在选择模式下选中文本 |
| 右键 | 选中光标到右键点击处的文本 | 显示弹出菜单 |
| 中键 | 在光标处粘贴选中的文本 | 将系统剪切板中的文本粘贴到文件 |
使用以下命令,可以定义双击之间的最大时间间隔:
:set mousetime=time
其中的时间以毫秒为单位,默认情况下为半秒(500ms)。
使用以下命令,可以设置鼠标的模式为extend,popup,popup_setpos其中之一:
:set mousemodel=mode
在所有模式之下,鼠标左键可以移动光标,拉动左键可以选择文本。在extend模式中,可以使用左键点中起始位置,然后按住Alt键的同时右击结束位置,将选中两点定义的可视化块(visual block)。在popup模式中,右键可以显示弹出菜单。而popup_setpos模式与popup模式相类似,所不同的只是当按下鼠标右键时,光标会移动到鼠标点击处,然后显示弹出菜单。
通过clipboard选项,可以控制Vim如何处理由鼠标选择的文本。使用以下设置,可以将所有鼠标选择的文本放在未命名寄存器中和剪切板寄存器中,这也意味着我们可以将文本粘贴到其他程序中。
:set clipboard=unnamed
如果设置如下选项,那么可视模式下选择的文本就会被放到系统剪切板中:
:set clipboard=autoselect
隐藏鼠标
在图形界面下编辑时,如果认为鼠标光标的存在会打扰你的工作,可以设置隐藏鼠标光标。
:set mousehide
设置之后,当键盘输入时鼠标光标就会隐藏,而移动光标时鼠标光标就会再度出现。
帮助信息
可以使用以下命令,查看关于鼠标使用的更多帮助信息:
:help mouse
:help mouse-using
:help scroll-mousewheel
:set mouse=a | 启用鼠标 |
:set mouse="" | 禁用鼠标 |
:behave | 控制鼠标的行为 |
:set mousetime | 设置双击时间间隔 |
:set mousemodel | 设置鼠标模式 |
:set mousehide | 隐藏鼠标 |
星期四, 六月 14, 2018
星期四, 六月 07, 2018
星期三, 五月 30, 2018
VIM学习笔记-开篇
一直在学,也一直在用Vim。一直遇到问题,也一直在得到答案。慢慢的,Vim成了我最重要的文本编辑器和网页编辑器。
文章溯源
某日在某Blog,下载了一个名为《vi编辑器的学习使用》的文件。打开一看——密密麻麻的文字有一百多页。当时,觉得复杂的可怕。现在,才越来越发现它的价值。每次有所疑问,都能从这个文件中找到解答。每天花十几分钟,阅读几十行,也有不少收获。可问题是,这个文章的排版真是糟糕,命令和文字混在一起,内容也缺乏有条理的组织,阅读起来十分吃力。所以,我在边阅读时也边整理(同时也结合了其他阅读资料),希望能把它以更好的形式展示出来。我将文章按主题分拆为多个章节,并尽量控制每节的信息量,以便读者消化其中的知识;每节中通过文字色彩和字体,将命令、快捷键突出显示出来;在每节结尾,提供一个命令列表,以便回顾文中介绍的重要命令。如果这些文章能对喜欢Vim的朋友有所益处,我将不胜荣幸。
发展历史
1976年,Bill Joy开发了vi,他毕业于伯克利大学,后来共同成立了Sun Microsystems公司并成为了Sun的首席科学家。一开始Bill开发了ex,尔后开发了vi作为 ex的visual interface,也就是说vi允许一次能看到一屏的文本而非一行,所以vi也代表visual editor。
1988年,Bram Moolenaar在Amiga计算机上改进一个叫Stevie的VI版本,他称之为“Vi IMitation”。
1991年11月2日,Vim的首个版本1.14g公开发布。Vim既是开源软件(Opensource),也是慈善软件(Charityware)的概念,你可以自由地使用Vim,但鼓励用户通过ICCF Holland为乌干达的孤儿做出捐助。
1992,随着功能逐渐丰富的1.22版本发布,VIM的名称也想要改成了“Vi IMproved”。相比原始的VI,VIM增加的一项最重要的功能便是多级撤销,VI只支持一级撤销。
1988 | Vim 1.0 | Vi IMitation on the Amiga |
1991 | Vim 1.14 | First public release (on Fred Fish disk #591) |
1992 | Vim 1.22 | Port to Unix |
1993 | Vim 2.0 | Renamed to Vi IMproved |
1994 | Vim 3.0 | Multiple buffers and windows |
1996 | Vim 4.0 | GUI |
1998 | Vim 5.0 | Syntax coloring and highlighting |
2001 | Vim 6.0 | Folding, plugins, multi-language |
2006 | Vim 7.0 | On the fly spell checker, support for tabs |
2016 | Vim 8.0 | Jobs, Timers, Partial, Packages |
功能哲学
Vim起初是为在终端中使用而设计的,但现如今已有多种图形界面提供菜单、工具栏和滚动条。普通用户可以完全无障碍的使用常用的文本编辑功能。而追求编辑效率的程序员,其它经常处理纯文本的人员,Web 开发人员,编写LaTeX文档的研究人员,Unix / Linux 系统管理员,也能找到自己需要的特定高级功能。
多模式编辑 Vim设计在不同的模式下,分别进行文字录入和文字操作。你可在插入模式下,像普通文本编辑器那样输入文字;而退回到常规模式,则可以利用命令和快捷键对文字进行增、删、改等等处理。 为了高效使用Vim,我们必须习惯尽量停留在常规模式:只在必要时进入插入模式以输入文字,然后立刻使用Esc键退换到命令模式,这样双手不用离开键盘就可以继续对个别乃至整篇文本进行下一步操作。
跨平台 Mac上有MacVim,Windows上有GVim, Linux上有Vim。而且,在不同的平台上可以使用相同的命令和插件完成相同的任务。所以,看似陡峭的学习曲线也同时带来更大的持续回报。
可度灵活的可配置性 在Vim生态之中,有大量不同的插件专注于完成不同的任务。比如:格式化代码,自动化备注,整合Git/Github,语法高亮度等等。再配合Vim强大的自定义配置能力,你完全可以按照自己的喜好定制出一个属于你的开发环境。
强大的搜索功能 Vim可以对文本进行及其复杂的查找和替换,包括对正则表达式(regular expressions)和grep的全面支持。
丰富的帮助信息 不提网上浩如烟海的Vim文档,只是内置的在线帮助 “:help” 就已经完整的令人发指!
笔记目录
星期四, 四月 19, 2018
耳光乐队:满世荒唐言
一个巴掌拍不响 左右开弓打耳光
耳光乐队,一个自称唱了20年还没出名的乐队;一个自称远离主流的乐队。当然,也是一个自觉不与主流合流的民俗摇滚乐队,一个用“三俗”来毁“三观”的批判者,一个用后现代主义来解构现实的观察者。
面对现实,千人千面,各有各的应对,大多数的大部分人,自然而然地带上面具,熟门熟路地避免感知,拒绝思考,也幸免于随之而来的困惑与迷茫。另外的人,则需要各种鸡零狗碎的心灵鸡汤,让自己听着别人的号子铿锵上路,直到那些伟大的思想变成上吊的绳
仙人指lu为马
中国人,可以把所有喜剧、悲剧、闹剧都变成段子,变成自怨自艾的无可奈何,变成呲牙咧嘴的机灵乖巧。耳光乐队,则是常规中的异类,段子手中的世外高人。
耳光乐队的音乐,就是耳光乐队的段子,是更有批判价值的段子。
郭德纲说过:“相声要是不搞笑,那就太搞笑了”;赵哥也说过:“摇滚乐要是不批判,那这事就太批判了。”
忠于现实的精妙指摘,豁达张狂的指桑骂槐,没羞没臊的微言大义。没有刻意地表演深刻,也没有曲迎地歌功颂德。借由传统民俗的叙事结构,精心排布的工整对仗,排比重复的文字堆叠。这些刻意为之的结构与节奏,不但增强了表达的重量感,更还原出现实的荒谬感。在同一专辑或同一系列之中,这样一致甚至刻板的结构,更汇聚出愈加强烈的表达效果。
相对而言,另一民俗风格的摇滚乐队--二手玫瑰,则使用更丰富的音乐元素和节奏变换,来更直接更戏剧化地进行表达。
耳光乐队的朴实工整,二手玫瑰的花枝招展,在不同维度,用不同的姿势,进行各自的戏虐、调侃和解构。
耳光乐队用长篇叙事铺陈背景埋下包袱,然后立在原地袖手旁观,等着听者回过神来,自行补全故意留白的话外之音,然后漠然相视,然后哑然一笑。
二手玫瑰,则在第一时间把你拉到同一视角,手把手地点出笑点和痛点。
同样以地方俚语为主要载体的耳光乐队和二手玫瑰,以各自的玩法进行各自的表达,扒开生活的遮羞布,直视皮囊之下无趣的鲜活。
生活就像一盘黑暗料理
相对于民俗基底的文字,耳光的音乐却是西洋把式的。Funk、说唱、复古迪斯科,甚至有小镇法廊里流行音乐的拼盘。
本土的瓤,外来的皮,这是一重内容与形式的反差。
而另一重反差,则是形制固化的专辑与痛快淋漓的现场的反差。
耳光乐队的现场冲击力是远远超越纸面音乐的。舞台上的耳光,以收放自如的掌控力释放出更巨大的表达能量。乐队的投入程度是极为惊人的,让人感觉乐手比乐迷更需要这样的演出宣泄。指挥场下观众的主唱,撩人的吉他手,性感的键盘。乐器的分贝好像放大了若干倍,乐曲的节奏也好像提速里了干倍。赵哥一定是个资深的球迷,站定了,举手投足就是球员进球后的雕塑般的庆祝动作。
耳光会很实在地从不冷场地唱足2个小时。赵哥会招呼灯光师聚焦在主唱身上,以便让他能看清扇面上还没来及背下来的歌词;赵哥会一边拿着手帕擦汗,一边冲着台下的观众喊话“不用麻烦你们了,我们自己返场”。然后,台下像台上一样嚣张地回应“耳光牛逼,牛逼”!随着赵哥掏出一把又一把折扇,现场也在多重高潮中进入另一次高潮。
艺术男儿裆自强
耳光乐队,既不是径直冲向风车的堂吉柯德,更不是趋炎附势避重就轻的投机者,而是举重若轻消解空洞意义的旁观者和解读者。是大喇叭或者风语者,提醒我们重新回望已然习惯麻木、无从下手、无法言表的荒诞现实。只是,这回望之后的无力感,又要去哪里安放?难道就像狈老板的菊花虽苦,蛋蛋有滋味......
一切的评价都是多余的,就像顶楼马戏团所说:“主唱赵荒唐的扇子,犹如利刃般扎入社会阴暗的私处,以四两拨千斤的功夫,调笑世间百态。民俗但不恶俗。让你笑,然后苦笑。”
星期三, 四月 18, 2018
Finance for Non-Financial Managers
一本定位和结构都非常清晰的财务书。利用简明易懂的平实语言,铺陈了基本和关键的财务知识体系。从经营和运作的角度,深入浅出地讲解了至关重要的财务知识;而不是从专业财务人员记账的操作角度,过于艰深和机械地坠入细节之中。
本书首先强调了财务信息对于企业配置资源和评价业绩的重要性;然后介绍了总账、科目和权责发生制等关键概念;接下来即是此书的核心部分,围绕三大财务报表(资产负债表、利润表和现金流量表),讲解各报表的编制和分析方法。此书后半部分,介绍了成本归集概念,经营策略和年度预算的编制过程,以及各种内部和外部融资的选项。
本书利用很大篇幅,详细介绍了三大财务报表(资产负债表、利润表和现金流量表)的各个报表项以及编制方法。报表项也从财务科目的维度,映射到经营业务的角度,以便读者更直观地理解报表项的含义和计算逻辑。
其中,现金流量表的间接编制法,是稍显抽象的部分,而且需要考虑现金流量表与资产负债表和损益表之间的联系。
在Critical Performance Factors (CPF) 部分,也就是我们经常提及的Key Performance Indicators (KPI),此书提炼了若干关键业务指标。这些指标并不完全拘泥于财务角度,也包括了销售相关的绩效指标。针对每个指标,除了说明纸面上的计算逻辑,也解释了其背后的业务意义。本书也提醒读者,除了关注静态的业务指标,也需要从时间的维度上关注指标的变化趋势,并预计未来的发展方向。
最后,此书归纳了融资和吸引外部投资的选项,对于初创公司有很大的参考作用。
纵观此书,语言简洁,体系清晰,作者成功地将财物与业务融会贯通,非常适合非财务人员通读并理解财务管理的基本概念和核心理念。
请下载此读书笔记完整的MindMpa
星期三, 四月 11, 2018
星期五, 四月 06, 2018
星期一, 四月 02, 2018
听他们说爱国主义这回事
民族主义是我们这个时代的乱伦形式,偶像崇拜和精神病症。爱国主义正是它的崇拜对象。显然,我这里所讲的爱国主义,是一种把自己民族凌驾于人性、真理和正义原则之上的态度……对自己民族国家的爱,如果不包括对人类的爱,就不是爱而是偶像崇拜。
--弗洛姆
爱国主义就是让你确信这个国家比所有其他的国家都要出色,只因为你生在这里。
--乔治•肖伯纳
爱国主义是超越于原则之上的对于不动产的一种专横的崇拜。
--乔治•简•纳森
爱国主义是无赖最后的避难所。
——塞缪尔•约翰逊(Samuel Johnson )
除非你把爱国主义从人类中驱逐出去,否则你将永远不会拥有一个宁静的世界。爱国主义是一种有害的、精神错乱的白痴形式。爱国主义就是让你确信这个国家比所有其他的国家都要出色,只因为你生在这里。
——乔治•肖伯纳
爱国主义:一堆随时可以被任何野心家所点燃,去照亮他的名字的易燃垃圾。——安卜罗斯•皮尔斯
爱国者的责任就是保护国家不受政府侵犯。——托马斯•潘恩
争你自己的自由就是争国家的自由,争你自己的权利就是争国家的权利。因为自由平等的国家不是一群奴才建造得起来的!
——胡适
星期五, 三月 30, 2018
星期一, 三月 19, 2018
曼森的心灵鸡汤(高度的)
俯视我,你看到的是一个傻子;仰视我,你看到的是一个神;平视我,你看到了你自己。
很久以前,成为疯子是有意义的。 现在,人人都是疯子。
曼森家族中的许多人都是被家庭抛弃的他们流浪在街头,他们不想去少年管教所我尽我所能,把他们带到我的垃圾场,我告诉他们,这里有爱,没有对错。
在乎究竟他妈的是什么意思?
只要我想,我可以是世界上最危险的男人,但我只想做我自己,从来不想成为别的。
死亡是爱的最好表达。疼痛能教会人很多事情。
查尔斯·曼森(Charles Manson)是20世纪最臭名昭著的杀人犯和邪教首领之一。他和他的追随者们在1969年至1971年之间犯下多宗杀人案,其中包括残忍地捅死当时已怀孕7个月的女演员、导演波兰斯基的妻子莎郎·蒂。1971年,曼森被判处终身监禁。2017年11月19日,曼森在加利福尼亚州的监狱里去世,终年83岁。曼森被称为操纵大师,他有虔诚的追随者和死心塌地的女粉丝,影响力甚至蔓延到音乐和影视等文化领域。哥特摇滚乐队玛丽莲·曼森(Marilyn Manson)其名也取自于他(其名的前半部分,则取自于美女玛丽莲梦露)。
曼森是历史上收到最多信件的因犯。每年,他都能收到至少6万封信。 曼森说自己在戴尔·卡耐基的畅销书《如何赢取友谊与影响他人》中学习了如何操纵别人。 他诱导有感情创伤的女孩,让她们觉得自己是美丽而完美的,一切错误都在她们的父母身上,她们应该放下一切跟随他。
星期三, 三月 07, 2018
星期三, 六月 14, 2017
VIM学习笔记 脚本-自定义命令 (Script-User Defined Command)
使用脚本语言,可以更灵活地定制编辑器以完成复杂的任务。
自定义命令
Vim编辑器允许定义自己的命令,我们可以像执行内置命令一样来执行我们自己定义的命令。
使用以下:command命令自定义命令:
:command Delete_first :1delete
注意自定义命令的名称,必须以大写字母开头,而且不能包含下划线;如果我们执行:Delete_first自定义命令,那么Vim就会执行:1delete命令,从而删除第一行。
可以使用!来强制重新定义同名的自定义命令:
:command! -nargs=+ Say :echo <args>
用户定义的命令可以指定一系列的参数,参数的个数由-nargs选项在命令行中指定。例如定义Delete_one命令没有参数:
:command Delete_one -nargs=0 1delete
默认情况下-nargs=0,所以可以省略。其他-nargs选项值如下:
-nargs=0 | 没有参数 |
-nargs=1 | 1个参数 |
-nargs=* | 任何个数的参数 |
-nargs=? | 零个或是一个参数 |
-nargs=+ | 一个或是更多个参数 |
在命令定义中,参数是由关键字<args>指定的:
:command -nargs=+ Say :echo "<args>"
输入以下自定义命令:
:Say Hello World
命令的执行结果显示:
Hello World
使用-range选项,可以指定一个范围作为自定义命令的参数。-range选项值如下:
-range | 允许范围,默认为当前行 |
-range=% | 允许范围,默认为当前文件(while file) |
-range=count | 允许范围,单一的数字 |
当指定范围之后,就可以用关键字<line1>和<line2>得到这个范围的第一行和最后一行。
例如以下定义了SaveIt命令,用于将指定范围的文件写入文件save_file:
:command -range=% SaveIt :<line1>,<line2>write! save_file
关键字<f-args>含有与关键字<args>相同的信息,所不同的是它用于调用函数。例如以下自定义命令:
:command -nargs=* DoIt :call AFunction(<f-args>)
执行自定义命令:
:DoIt a b c
将会传递参数给调用的函数:
:call AFunction("a","b","c")
其他选项和关键字包括:
-count=number | 指定数量保存在关键字<count>中 |
-bang | 指定!修饰符存放在关键字<bang>中 |
-register | 指定寄存器,默认为未命名寄存器,寄存器的定义保存在关键字<register>中 |
-bar | 其他命令可以用|跟随在此命令之后 |
-buffer | 命令仅对当前缓冲区有效 |
使用以下命令,首先分别创建一个用户自定义命令,然后再将两个命令组合起来。
列示自定义命令
使用以下命令,可以列出用户定义的命令:
:command
删除自定义命令
使用以下:delcommand命令,可以删除用户定义的命令:
:delcommand Delete_one
使用以下命令,清除所有的用户定义的命令:
:comclear
星期一, 六月 12, 2017
VIM学习笔记 脚本-自定义函数 (Script-User Defined Function)
使用脚本语言,可以更灵活地定制编辑器以完成复杂的任务。
定义函数
Vim编辑器允许用户自定义函数,语法如下:
Name,函数名称必须以大写字母开始,并且只可以包含字母、数字和下划线。
arg1-argN,调用函数时需要为命名参数(Named Parameters)赋值。如果不需要任何参数,那么可以将括号()部分置空。最多可以定义20个参数。
keyword,range关键字定义一个范围函数(:function Count_words() range)会针对范围内的每一行重复执行操作;abort关键字指示函数(:function Do_It() abort)会在第一个错误时退出。
下面我们来定义一个函数,用来返回两个数中较小的一个:
函数内部的变量(例如smaller)均为局部变量,除非使用了g:作为前缀。例如在函数外我们定义了变量var,那么在函数内部可以使用g:var来调用。前缀a:的变量均为函数参数。
return 语句用于返回结果并结束函数。return语句之后的所有代码都不会被执行。
如果尝试定义一个已经存在的函数,那么将会收到报错信息。可以使用!来强制重定义同名函数。
:function! Max(num1, num2, num3)
Vim允许在函数中使用“...”来标识个数不定的可变参数(Variadic Parameters)。例如以下代码定义函数至少有2个参数,最多有20个参数:
argnum 计数器,用于记录num1和num2之后的参数个数;
a:num1 变量,用于访问指定的参数;
a:0 变量,用于记录参数总个数;
a:{argnum} 变量,用于访问每一个参数的值,例如a:1或a:2;
以下范围函数实例,将在指定范围行内执行替换操作:
当函数被以下命令调用时,变量a:firstline和a:lastline就会被赋值为这个范围内的第一行和最后一行,然后更新范围内的每一行。你可以使用:help cmdline-ranges命令,查看关于范围操作的更多信息。
:1,$call DeAmperfyAll()
调用函数
可以在表达式中调用函数:
:let tiny = Min(10,20)
还可以使用:call命令来调用函数:
:[range]call {function}([parameters])
列示函数
使用以下命令,可以列出所有用户定义的函数:
:function
使用以下命令,可以查看指定函数的代码:
:function {name}
使用以下命令,可以查看Vim内置函数的使用说明:
:help functions
删除函数
使用以下命令,可以删除指定的函数:
:delfunction {name}
星期二, 六月 06, 2017
VIM学习笔记 脚本-语句 (Script-Statements)
使用脚本语言,可以更灵活地定制编辑器以完成复杂的任务。
:echo命令
:echo可以显示命令中的参数。
:echo "Hello world"
Hello world
:echo还可以显示变量的值。
:let flag=1
:echo flag
1
使用|可以分隔同一行中的两个命令。
:echo "aa" | echo "bb"
aa
bb
:echon也只显示命令中的参数,但不会输出新行。
:echon "aa" | echon "bb"
aabb
可以通过:echohl命令,使用指定高亮颜色组输出信息。
:echohl ErrorMsg
:echo "A mistake has been make"
A mistake has been make
为了不影响后续:echo命令的显示效果,建议使用以下命令重设高亮显示为None:
:echohl None
使用以下命令,可以查看高亮显示组的颜色定义:
:highlight
在:echo命令中,可以使用以下转义符:
\nNewline\rCarriage return\tTab\123八进制数字\x123十六进制数字\u01fc34Unicode\fForm feed\eEsc\bBackspace\\反斜线
判断
if语句的一般形式如下:
只有条件(condition)为真时,if语句块内的语句才会被执行。
if语句还可以包含else子句:
满足条件(condition)时,if语句块内的语句将会被执行;而不满足条件(condition)时,则else语句块内的语句将会被执行。
if-else结构还可以进行多重判断
循环
while命令开始一个循环,并由endwhile命令结束。在条件为真是,循环中的代码将被重复执行。
continue命令回到程序的顶部开始执行下一次循环;而break命令则立刻退出循环。
:execute命令
:execute将执行参数中指定的命令:
:let command = " echo 'Hello world!'"
:execute command
Hello world
星期三, 五月 24, 2017
VIM学习笔记 脚本-变量和表达式 (Script-Variables and Expressions)
使用脚本语言,可以更灵活地定制编辑器以完成复杂的任务。
定义变量
使用以下命令,可以为变量赋值:
:let {variable}={expression}
Vim中的变量名可以包含字符、数字和下划线,但必须以字符或是下划线开头。
例如使用以下命令,定义变量line_size:
:let line_size=30
使用:echo命令,可以查看变量的内容:
:echo "line_size is"line_size
命令执行以后,Vim将会在屏幕底部显示如下内容:
line_size is 30
变量类型
Vim使用特殊的前缀来指明不同的变量类型:
| 变量名 | 用途 |
|---|---|
| 大写字母,数字,下划线 | 可以存放在viminfo文件中的变量(如果viminfo选项中含有!标记) |
| 大写字母开头 | 变量可以由:makesession命令保存 |
| 小写字母,数字,下划线 | 不会存在任何保存文件中的变量 |
| $environment | 环境变量 |
| @register | 文本寄存器 |
| &option | 选项名字 |
| b:name | 当前缓冲区的变量 |
| w:name | 当前窗口的变量 |
| g:name | 全局变量(用于函数内部表明全局变量) |
| a:name | 函数参数 |
| v:name | Vim预定义内部变量 |
| l:name | 当前函数的变量 |
| s:name | 使用:source载入的脚本 |
| t:name | 当前标签页的变量 |
使用以下命令,可以定义环境变量$PAGER,用于指明查看的命令:
:let $PAGER="/usr/local/bin/less"
使用以下命令,可以显示上一次查找的模式:
:echo "Last search was"@/
使用以下任一命令,都可以设置缩进选项:
:let &autoindent=1
:set autoindent
使用以下命令,可以指定当前缓冲区的语法高亮显示:
:let b:current_syntax=c
Vim使用以下内部变量(v:name)存储相关信息:
| 变量 | 用途 |
|---|---|
| v:count | 上一次常规模式命令所指定的数量 |
| v:count1 | 与v:count相类似,所不同的是如果没有指定数量则默认值为1 |
| v:errmsg | 上一次的错误信息 |
| v:warningmsg | 上一次的警告信息 |
| v:statusmsg | 上一次的状态信息 |
| v:shell_error | 上一次Shell命令的结果。如果为0,则命令正常执行;若为非0,则命令失败 |
| v:this_session | 上一次装入或是保存的文件的命名 |
| v:version | Vim编辑器的版本号 |
以下为不同类型变量的实例:
删除变量
如果要删除一个变量,那么可以使用以下命令:
:unlet[!] {name}
如果试图删除一个不存在的变量,那么Vim就会报错;而如果使用!标记,则不会显示错误信息。
定义常量
数字常量有以下三种:
- 八进制(Octal Integer):0123
- 十进制(Simple Integer):123
- 十六进制(Hexadecimal):0xAC
Vim可以处理多种格式数字的计算:
:echo 10 + 0x0A + 012
字符常量有以下两种:
- 简单字符串(Simple String):"string"
- 精确字符串(Literal String):'string'
在双引号包围的字符串内,可以使用反斜线进行转义;而被单引号包围的字符串,则会被原样输出:
| 命令 | 输出 |
|---|---|
:echo "\100" | @ |
:echo '\100' | \100 |
算术运算
Vim可以使用以下算术运算符,进行表达式计算:
| int+int | 加 |
| int-int | 减 |
| int*int | 乘 |
| int/int | 除 |
| int%int | 取余 |
| -int | 取负 |
逻辑判断
逻辑运算符可以作用于字符串和整数,Vim将自动在这两种数据类型之间进行转换。如果比较成功则返回1,否则返回0。
| var == var | 等于 |
| var != var | 不等 |
| var < var | 小于 |
| var > var | 大于 |
| var < var | 小于等于 |
| var >= var | 大于等于 |
比较运算符可以进行字符串正则表达式的比较。例如将字符串"word"和表过式"\w*"比较,如果匹配则返回1。
"word"=~"\w*"
字符串的特殊比较包括:
| string =~ regexp | 匹配的正则表达式 |
| string !~ regexp | 不匹配的正则表达式 |
| string ==? string | 字符串相等,忽略大小写 |
| string ==# string | 字符串相等,大小写敏感 |
| string !=? string | 字符串不相等,忽略大小写 |
| string !=# string | 字符串不相等,大小写敏感 |
| string <? string | 小于,忽略大小写 |
| string <# string | 小于,大小写必须敏感 |
| string <=? string | 小于等于,忽略大小写 |
| string <=# string | 小于等于,大小写敏感 |
| string >? string | 大于,忽略大小写 |
| string ># string | 大于,大小写敏感 |
| string >=? string | 大于等于,忽略大小写 |
| string >=# string | 大于等于,大小写敏感 |
由此可见,每一个运算符有三种形式。基本形式(==)对应ignorecase选项;(==?)对应忽略大小写;(==#)则对应大小写敏感。
文件名
当我们输入文件名时,可以使用以下特殊符号:
% | 当前文件名 |
# | 交换文件名(Alternate filename) |
<cword> | 光标下的word |
<cWORD> | 光标下的WORD |
<cfile> | 光标下的文件名 |
<afile> | 当执行相关的自动命令(autocommand)正读入或是写入的文件名 |
<abuf> | 在一个自动命令中的当前缓冲区标号 |
<amatch> | 与<abuf>类似,但是在FileType或Syntax事件中并不是指代文件名,而是文件类型或语法名 |
<sfile> | 当前正用于:sourced的文件名 |
我们可以使用以下修饰符来扩展以上特殊符号的意义。例如:p可以将文件名转换为包括路径的全名。例如光标下的文件名为test.c,><cfile>是test.c,那么<cfile:p>就是/home/oualline/examples/test.c
修饰符主要包括:
:p | 将文件名变成全路径文件名。如果使用多个修饰符,那么必须将此修饰符放置在最前面。 |
:~ | 将绝对路径路径名如/home/oualline/examples/test.c 转变为 用~标记的短文件名如~oualline/examples/test.c |
:. | 转变为现对路径名 |
:h | 文件名的头。例如../path/test.c 将转变为 ../path |
:t | 文件名的尾。例如../path/test.c 将转变为 test.c |
:r | 无扩展名的文件名。例如../path/test 将转变为 test |
:e | 扩展名 |
:s?from?to? | 将第一次出现的from字符串改变为to字符串 |
:gs?from?to? | 将所有的字符串from改变为to字符串 |
使用以下命令,可以利用:p修饰符显示完整的当前文件名。你可以将命令中的:p换成其他需要测试的修饰符。
:echo expand("%:p")



















