首先,我们在函数名前增加前缀s:,这样它就会处于当前脚本的命名空间。 我们也修改了映射,在GrepOperator前面添上,所以Vim才能找到这个函数。 如果我们不这样做,Vim会尝试在全局命名空间查找该函数,这是不可能找到的。 欢呼吧,我们的grep-operator.vim脚本不仅非常有用,而且是一个善解人意的Vimscript公民! 练习 阅读:...
问题在于Vim在拓展命令行中的特殊变量,比如<cWORD>,的之前,就已经执行了shellescape()。 所以Vim shell-escaped了字面量字符串"<cWORD>"(什么都不做,除了给它添上一对单引号)并连接到我们的grep命令上。 通过执行下面的命令,你可以亲眼目睹这一切。 :::vim :echom shellescape("<cWORD>") Vim将输出'<c...
可以将字典(Dictionary),理解为存储了关于键-值的成对的二元数组。以下将演示在脚本中利用字典数据结构的实例。 删除重复行 在文本排序(sort)章节中,使用以下Vim内置的排序命令,可以去除文件中的重复行,同时原始行的顺序也将随之改变。对于重复的多行,将仅仅保留第一行,而其它的行将被删除。
首先,找到你的Vimplugin文件夹。在Linux或OS X,这将会是~/.vim/plugin。 如果你是Windows用户,它将位于你的主目录下的vimfiles文件夹。(如果你找不到,在Vim里使用`:echo $HOME命令) 如果这个文件夹不存在,创建一个。 在plugin/下新建文件grep-operator.vim。这就是你放置新运算符的代码的地方。 一旦文件被修...
要创建一个新的Vim运算符,你需要从两个组件开始:一个函数还有一个映射。 先添加下面的代码到grep-operator.vim: nnoremap <leader>g :set operatorfunc=GrepOperator<cr>g@ function! GrepOperator(type) echom "Test" endfunction 保存文件并用:source %source它。尝试通过按下<leader>giw来执行"grep整个词"。
实例研究:Grep运算符(Operator),第三部分 我们新鲜出炉的"grep运算符"工作得很好,但是写Vimscript的目的,就是要体贴地改善你的用户的生活。 我们可以额外做两件事,让我们的运算符更加符合Vim生态圈的要求。 保护寄存器 由于把文本复制到未命名寄存器中,我们破坏了之前在那里的内容。