当前位置:K88软件开发文章中心编程工具Vim → 文章内容

Vimscript 外部命令

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-24 10:54:18

" Open a new split and set it up. vsplit __Potion_Bytecode__ normal! ggdG setlocal filetype=potionbytecode setlocal buftype=nofile " Insert the bytecode.endfunction新增的命令应该很好理解。vsplit创建了名为__Potion_Bytecode__的新竖直分割。 我们用下划线包起名字,使得用户注意到这不是普通的文件(它只是显示输出的缓冲区)。 下划线不是什么特殊用法,只是约定俗成罢了。接着我们用normal! ggdG删除缓冲区中的所有东西。 第一次执行这个映射时,并不需要这样做,但之后我们将重用__Potion_Bytecode__缓冲区,所以需要清空它。接下来我们为这个缓冲区设置两个本地设置。首先我们设置它的文件类型为potionbytecode,只是为了指明它的用途。 我们也改变buftype为nofile,告诉Vim这个缓冲区与磁盘上的文件不相关,这样它就不会把缓冲区写入。最后还剩下把我们保存在bytecode变量的字节码转储进缓冲区。完成函数,让它看上去像这样:function! PotionShowBytecode() " Get the bytecode. let bytecode = system(g:potion_command . " -c -V " . bufname("%") . " 2>&1") " Open a new split and set it up. vsplit __Potion_Bytecode__ normal! ggdG setlocal filetype=potionbytecode setlocal buftype=nofile " Insert the bytecode. call append(0, split(bytecode, '\v\n'))endfunctionVim函数append()接受两个参数:一个将被附加内容的行号和一个将按行附加的字符串列表。 举个例子,尝试执行下面命令::call append(3, ["foo", "bar"])这将附加两行,foo和bar,在你当前缓冲区的第三行之后。 这次我们将在表示文件开头的第0行之后添加。我们需要一个字符串列表来附加,但我们只有来自system()调用的单个包括换行符的字符串。 我们使用Vim的split()函数来分割这一大坨文本成一个字符串列表。?split()接受一个待分割的字符串和一个查找分割点的正则表达式。这真的很简单。现在函数已经完成了,试一下对应的映射。 当你在factorial.pn中执行<localleader>b,Vim将打开新的包括Potion字节码的缓冲区。 修改Potion源代码,保存文件,执行映射来看看会有什么不同的结果。练习阅读:help bufname。阅读:help buftype。阅读:help append()。阅读:help split()。阅读:help :!。阅读:help :read和:help :read!(我们没有讲到这些命令,不过它们非常好用)。阅读:help system()。阅读:help design-not。目前,我们的插件要求用户在执行映射之前手动保存文件来使得他们的改变起效。 当今撤销已经变得非常轻易,所以修改写过的函数来自动替他们保存。如果你在一个带语法错误的Potion文件上执行这个字节码映射,会发生什么?为什么?修改PotionShowBytecode()函数来探测Potion编译器是否返回一个错误,并向用户输出错误信息。加分题每次你执行字节码映射时,一个新的竖直分割都会被创建,即使用户没有关闭上一个。 如果用户没有一再关闭这些窗口,他们最终将被大量额外的窗口困住。修改PotionShowBytecode()来探测__Potion_Bytecode__缓冲区的窗口是否已经打开了, 如果是,切换到它上去而不是创建新的分割。你大概想要阅读:help bufwinnr()来获取帮助。额外的加分题还记得我们设置临时缓冲区的filetype为potionbytecode? 创建syntax/potionbytecode.vim文件并为Potion字节码定义语法高亮,使得它们更易读。

上一页  [1] [2] 


Vimscript 外部命令