目前为止我们已经介绍了几个最为常用的Vimscript命令,但都跟日常中在normal模式下处理文本的方式无关。 有没有一种办法能把我们的脚本跟日常的文本编辑命令结合起来呢?
答案显然是肯定的。之前我们已经见过normal
命令,是时候更详细地介绍它了。 执行下面的命令:
:normal G
Vim将把你的光标移到当前文件的最后一行,就像是在normal模式里按下G
。现在执行下面命令:
:normal ggdd
Vim将移动到文件的第一行(gg
)并删除它(dd
)。
normal
命令简单地接受一串键值并当作是在normal模式下输入的。就是那么简单!
执行下面的命令来映射G
键到别的东西:
:nnoremap G dd
现在在normal模式按下G
将删除一整行。试试这个命令:
:normal G
Vim将删除当前行。normal
命令将顾及当前的所有映射。
这意味着我们需要给normal
提供类似于nnoremap
之于nmap
的版本, 否则我们没法使用它——考虑到我们猜测不了用户的映射方式。
幸好Vim真的有这样的命令叫normal!
。执行这个命令:
:normal! G
这次Vim将移动光标到文件底部,即使G
已经被映射了。
在写Vim脚本时,你应该_总是_使用normal!
,_永不_使用normal
。不要信任用户在~/.vimrc
中的映射。
如果你使用normal!
一段时间了,就很可能注意到一个问题。试试下面的命令:
:normal! /foo<cr>
第一眼看上去它应该会开始搜索foo
,但你将看到它不会正常工作。 问题在于normal!
不会解析像<cr>
那样的特殊字符序列。
于是,Vim认为你想要搜索字符串序列"foo",没有意识到你甚至按下了回车来进行搜索! (译注:原文为you even pressed return to perform the search! 按后文的意思应该是没有按下return,待问作者) 我们将在下一章讨论如何应对这个问题。
阅读:help normal
。在最后部分,你将获得关于下一章主题的提示。
如果你还没准备好面对挑战,跳过这一节。如果你够胆,祝你好运!
重温:help normal
关于undo的部分。尝试设计一个删除两行却能单独撤销每次删除的映射。 建议从nnoremap <leader>d dddd
开始吧。
这次你并不真的需要normal!
(nnoremap
就够了), 但是它揭示了一点:有时阅读一个Vim命令的文档可以激发关于别的内容的奇思妙想。
如果你未尝使用过helpgrep
命令,那就是时候用上它了。阅读:help helpgrep
。 留心关于怎样在匹配内容中浏览的部分。
暂时先别纠结模式(patterns),我们很快就要谈到它们。 现在只需了解你可以用类似foo.*bar
来查找文档中包括该正则模式的行。
不幸的是,helpgrep
会不时给你带来挫折感,因为为了找到某些词,你需要懂得去搜索某些词。 我会帮你省下些无用功,这次你得查找到一种手工修改Vim的撤销序列的方法, 这样你映射的两个删除才能独立地撤销。
在以后你要灵活变通(pragmatic)。有时在你迷惘徘徊的时候,Google一下,你就知道。
SVG 渐变- 放射性 SVG 放射性渐变是从一个点开始发散绘制渐变,创建径向渐变需要在文档的 defs 中添加一个 radialGradient 元素...
XSL-FO region-after 对象XSL-FO 参考手册定义和用法 fo:region-after 对象定义了页面的底部区域(页脚)。 XSL-FO 使用下列元素...
XSL-FO root 对象XSL-FO 参考手册定义和用法 fo:root 对象是 XSL-FO 文档的根(顶级)节点。 fo:root 对象的子类是一个单独的 fo...
XSL-FO background-attachment 属性 XSL-FO 参考手册定义和用法 background-attachment属性的作用是:定义背景图像是固定的还是...
XML Schema selector 元素 完整 XML Schema 参考手册定义和用法 selector 元素指定 XML 路径语言 (XPath) 表达式,该表达式为标...
XPointer 实例 本节中,你将学习使用XPointer 语法。让我们通过研究一个实例来学习一些基础的 XPointer 语法。XPointer 实例 在...
XSLT format-number() 函数使用 format-number()函数可以将数字转换成字符串。 完整的 XSLT 函数参考对象定义和用法 format-numb...
XML DOM ownerDocument 属性 Element 对象定义和用法 ownerDocument 属性返回选定的元素所属的文档对象。 语法elementNode.owner...
JavaScript NaN 属性 JavaScript 全局函数定义和用法NaN 属性用于引用特殊的非数字值。 该属性指定的并不是不合法的数字。NaN 属...
JavaScript decodeURIComponent() 函数 JavaScript 全局函数定义和用法decodeURIComponent() 函数可对 encodeURIComponent() 函...