×

vi 命令手册

vi/vim 命令大全

vim 命令手册

Vim 关于Vim 安装Vim 用法Vim 配置vim 配置.vimrc方案vim 配置.vimrc方案1vim 配置.vimrc方案2Vim 文件合并Vim 技巧和建议Vim 插件Vim 参阅

Vimscript 编程参考

Vimscript 前言Vimscript 鸣谢Vimscript 预备知识Vimscript 打印信息Vimscript 设置选项Vimscript 基本映射Vimscript 模式映射Vimscript 精确映射Vimscript LeadersVimscript 编辑你的Vimrc文件Vimscript AbbreviationsVimscript 更多的MappingsVimscript 锻炼你的手指本地缓冲区的设置和映射Vimscript 自动命令Vimscript 本地缓冲区缩写Vimscript 自动命令组Operator-Pending 映射Operator-Pending 更多映射Vimscript 状态条Vimscript 负责任的编码Vimscript 变量Vimscript 变量作用域Vimscript 条件语句Vimscript 比较Vimscript 函数Vimscript 函数参数Vimscript 数字Vimscript 字符串Vimscript 字符串函数Vimscript Execute命令Vimscript Normal命令Vimscript 执行normal!Vimscript 基本的正则表达式Grep 运算符Operator 第1部分Grep 运算符Operator 第2部分Grep 运算符Operator 第3部分Vimscript 列表Vimscript 循环Vimscript 字典Vimscript 切换Vimscript 函数式编程Vimscript 路径Vimscript 创建一个完整的插件Vimscript 基本插件配置方式用Pathogen配置插件Vimscript 检测文件类型Vimscript 基本语法高亮Vimscript 高级语法高亮Vimscript 基本折叠Vimscript 高级折叠Vimscript 段移动原理Vimscript Potion段移动Vimscript 外部命令Vimscript 自动加载Vimscript 文档Vimscript 发布Vimscript 还剩下什么?

Vimscript Normal命令


目前为止我们已经介绍了几个最为常用的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

第一眼看上去它应该会开始搜索foo,但你将看到它不会正常工作。 问题在于normal!不会解析像那样的特殊字符序列。

于是,Vim认为你想要搜索字符串序列"foo",没有意识到你甚至按下了回车来进行搜索! (译注:原文为you even pressed return to perform the search! 按后文的意思应该是没有按下return,待问作者) 我们将在下一章讨论如何应对这个问题。

练习

阅读:help normal。在最后部分,你将获得关于下一章主题的提示。

附加题

如果你还没准备好面对挑战,跳过这一节。如果你够胆,祝你好运!

重温:help normal关于undo的部分。尝试设计一个删除两行却能单独撤销每次删除的映射。 建议从nnoremap d dddd开始吧。

这次你并不真的需要normal!(nnoremap就够了), 但是它揭示了一点:有时阅读一个Vim命令的文档可以激发关于别的内容的奇思妙想。

如果你未尝使用过helpgrep命令,那就是时候用上它了。阅读:help helpgrep。 留心关于怎样在匹配内容中浏览的部分。

暂时先别纠结模式(patterns),我们很快就要谈到它们。 现在只需了解你可以用类似foo.*bar来查找文档中包括该正则模式的行。

不幸的是,helpgrep会不时给你带来挫折感,因为为了找到某些词,你需要懂得去搜索某些词。 我会帮你省下些无用功,这次你得查找到一种手工修改Vim的撤销序列的方法, 这样你映射的两个删除才能独立地撤销。

在以后你要灵活变通(pragmatic)。有时在你迷惘徘徊的时候,Google一下,你就知道。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)