Ch15-命令行模式
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
在前三章中,您已经学习了如何使用搜索命令(/, ?)、替换命令(:s)、全局命令(:g),以及外部命令(!)。这些都是命令行模式命令的一些例子。
在本章中,您将学习命令行模式的更多技巧。
进入和退出命令行模式
命令行模式本身也是一种模式,就像普通模式、输入模式、可视模式一样。在这种模式中,光标将转到屏幕底部,此时您可以输入不同的命令。
有 4 种进入命令行模式的方式:
搜索命令 (/, ?)
命令行指令 (:)
外部命令 (!)
您可以从正常模式或可视模式进入命令行模式。
若要离开命令行模式,您可以使用 <esc>、Ctrl-c、Ctrl-[。
有时其他资料可能会将"命令行指令"称为"Ex 命令",将"外部命令"称为"过滤命令"或者"叹号运算符"。
重复上一个命令
您可以用 @: 来重复上一个命令行指令或外部命令。
如果您刚运行 :s/foo/bar/g,执行 @: 将重 ...
Ch14-外部命令
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
在Unix系统内部,您会发现许多小型的,超专业化命令,每个命令只做一件事(而且能很好地完成)。您可以将这些命令链接在一起以共同解决一个复杂的问题。如果可以从Vim内部使用这些命令,那不是很好吗?
答案是肯定的!在本章中,您将学习如何扩展Vim以使其与外部命令无缝协作。
Bang 命令
Vim有一个Bang(!)命令,可以执行三件事:
1.将外部命令的STDOUT读入当前缓冲区。
2.将缓冲区的内容作为STDIN写入外部命令。
3.从Vim内部执行外部命令。
让我们一个个认真看一下。
将外部命令的标准输出STDOUT读入Vim
将外部命令的STDOUT读入当前缓冲区的语法为:
1:r !{cmd}
:r是Vim的读命令。如果不带!使用它,则可以使用它来获取文件的内容。如果当前目录中有文件file1.txt,运行:
1:r file1.txt
Vim会将file1.txt的内容放入当前缓冲区。
如果您运行的:r命令后面跟一个!和外部命令,则该命令的输出将插入到当前缓冲区 ...
Ch13-全局命令
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
到目前为止,您已经了解了如何使用点命令(.)重复上一次更改,如何使用宏(q)重复动作以及将文本存储在寄存器中(")。
在本章中,您将学习如何在全局命令中重复命令行命令。
全局命令概述
Vim的全局命令用于同时在多行上运行命令行命令。
顺便说一句,您之前可能已经听说过 “Ex命令” 一词。在本书中,我将它们称为命令行命令,但Ex命令和命令行命令是相同的。它们是以冒号(:)开头的命令。在上一章中,您了解了替代命令。这是一个Ex命令的示例。它们之所以称为Ex,是因为它们最初来自Ex文本编辑器。在本书中,我将继续将它们称为命令行命令。有关Ex命令的完整列表,请查看:h ex-cmd-index。
全局命令具有以下语法:
1:g/pattern/command
pattern匹配包含该模式串的所有行,类似于替代命令中的模式串。command可以是任何命令行命令。全局命令通过对与pattern匹配的每一行执行command来工作。
如果您具有以下表达式:
12345678const one ...
Ch12-搜索和替换
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
本章涵盖两个独立但相关的概念:搜索和替代。很多时候,您得基于文本的共同模式搜索大量的内容。通过学习如何在搜索和替换中使用正则表达式而不是字面字符串,您将能够快速定位任何文本。
附带说明一下,在本章中,当谈论搜索时,我将主要使用/。您使用/进行的所有操作也可以使用?完成。
智能区分大小写
尝试匹配搜索词的大小写可能会很棘手。如果要搜索文本"Learn Vim",则很容易把字母的大小写输错,从而得到错误的搜索结果。如果可以匹配任何情况,会不会更轻松,更安全?这是选项ignorecase闪亮的地方。只需在 vimrc 中添加set ignorecase,所有搜索词就不区分大小写。现在,您不必再执行/Learn Vim了。 /learn vim将起作用。
但是,有时您需要搜索特定大小写的短语。一种方法是用 set noignorecase 关闭ignorecase选项,但是每次需要搜索区分大小写的短语时,都得反复地打开和关闭这个选项。
为避免反复开关ignorecase选项, ...
Ch11-可视模式
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
高亮显示文本块并对其进行更改,是很多文本编辑器中的常见功能。 Vim也可以使用可视模式实现这一功能。在本章中,您将学习如何使用可视模式来有效地处理文本块。
三种可视模式
Vim有三种可视模式,分别是:
123v 逐字符可视模式V 逐行可视模式Ctrl-v 逐块可视模式
如果您有下列文字:
123onetwothree
逐字符可视模式用于选择单个字符。在第一行的第一个字符上按v。然后使用j跳转至下一行。它高亮显示从"one"到光标位置的所有文本。现在,如果您按gU,Vim将高亮显示的字符转为大写。
逐行可视模式适用于整行。按V并观看Vim选择光标的所在行。就像逐字符可视模式一样,如果您运行gU,Vim将高亮显示的字符转为大写。
逐块可视模式适用于行和列。与其他两种模式相比,它为您提供了更大的移动自由度。按Ctrl-V,Vim像逐字符可视模式一样高亮显示光标下的字符,但向下移动时,除非光标已经在行尾,否则不会高亮显示光标上方的整行,它 ...
Ch10-撤消
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
所有人都会犯各种各样的输入错误。因此对于任何一个现代的软件来说,撤销都是一个很基本的功能。 Vim 的撤销系统不仅支持撤销和取消撤销任何修改,而且支持存取不同的文本形态,让你能控制你输入的所有文本。在本章中,你将会学会如何执行撤销和 取消撤销文本,浏览撤销分支,反复撤销, 以及浏览改动时间线。
撤销(undo),重做和行撤销(UNDO)
对于一个基本的 undo 操作,你可以执行 u 或者 :undo。
假设你有如下文本(注意"one"下面有一个空行):
12one
然后添加另一个文本:
12onetwo
如果你执行 u,Vim 会删除 “two”。
Vim 是如何知道应该恢复多少修改呢? 答案是,Vim每次仅恢复一次修改,这有点类似于点命令的操作(和 点命令不同之处在于,命令行命令也会被算作一次修改)。
要取消上一次的撤销,可以执行 Ctrl-r 或者 :redo。例如上面的例子中,当你执行撤销来删除 “two” 以后,你可以执行 Ctrl-r 来恢复被删除掉的文本 ...
Ch09-宏
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
在编辑文件的时候,你会发现有时候你在反复地做一些相同的动作。如果你仅做一次,并在需要的时候调用这些动作岂不是会更好吗。通过 Vim 的宏命令,你可以将一些动作记录到 Vim 寄存器。
在本章中,你将会学习到如何通过宏命令自动完成一些普通的任务(另外,看你的文件在自动编辑是一件很酷的事情)。
基本宏命令
宏命令的基本语法如下:
12qa 开始记录动作到寄存器 aq (while recording) 停止记录
你可以使用小写字母 (a-z)去存储宏命令。并通过如下的命令去调用:
12@a Execute macro from register a@@ Execute the last executed macros
假设你有如下的文本,你打算将每一行中的所有字母都变为大写。
12345hellovimmacrosareawesome
将你的光标移动到 “hello” 栏的行首,并执行:
1qa0gU$jq
上面命令的分解如下:
q ...
Ch08-寄存器
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
学习Vim中的寄存器就像第一次学习线性代数一样,除非你学习了他们,否则你会觉得自己根本不需要它们。
你可能已经在复制或删除文本并用p或P粘贴它们到别处的时候使用过Vim的寄存器了。但是,你知道Vim总共有10种不同类型的寄存器吗?如果正确地使用Vim寄存器,将帮助您从重复的输入中解放出来。
在这一章节中,我会介绍Vim的所有寄存器类型,以及如何有效地使用它们。
寄存器的10种类型
下面是Vim所拥有的10种寄存器类型:
匿名寄存器("").
编号寄存器("0-9).
小删除寄存器 ("-).
命名寄存器 ("a-z).
只读寄存器 (":, "., and "%).
Buffer交替文件寄存器 ("#).
表达式寄存器 ("=).
选取和拖放寄存器("* and "+).
黑洞寄存器 ("_).
搜索模式寄存器 ("/).
寄存器命令
要使用寄 ...
Ch07-点命令
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
在编辑文本时,我们应该尽可能地避免重复的动作。在这一章节中,你将会学习如何使用点命令来重放上一个修改操作。点命令是最简单的命令,然而又是减少重复操作最为有用的命令。
用法
正如这个命令的名字一样,你可以通过按下.键来使用点命令。
比如,如果你想将下面文本中的所有”let“替换为"const":
123let one = "1";let two = "2";let three = "3";
首先,使用/let来进行匹配。
接着,使用cwconst<esc>来将"let"替换成"const"。
第三步,使用n来找到下一个匹配的位置。
最后,使用点命令(.)来重复之前的操作。
持续地使用n . n .直到每一个匹配的词都被替换。
在这个例子里面,点命令重复的是cwconst<esc>这一串命令,它能够帮你将需要8次输入的命令简化到只需要敲击一次键盘 ...
Ch06-插入模式
声明
本文搬运自Github仓库Learn-Vim_zh_cn,并针对部分错别字做出修正。
输入模式是大部分文本编辑器的默认模式,在这个模式下,所敲即所得。
尽管如此,这并不代表输入模式没什么好学的。Vim的输入模式包含许多有用功能。在这一章节中,你将能够学到如何利用Vim输入模式中的特性来提升你的输入效率。
进入输入模式的方法
我们有很多方式从普通模式进入输入模式,下面列举出了其中的一些方法:
12345678910i 从光标之前的位置开始输入文本I 从当前行第一个非空字符之前的位置之前开始输入文本a 在光标之后的位置追加文本A 在当前行的末尾追加文本o 在光标位置下方新起一行并开始输入文本O 在光标位置的上方新起一行并开始输入文本s 删除当前光标位置的字符并开始输入文本S 删除当前行并开始输入文本gi 从当前缓冲区上次结束输入模式的地方开始输入文本gI 在当前行的第一列的位置开始输入文本
值得注意的是这些命令的小写/大写模式,每一个小写命令都有一个与之对应的大写命令。如果你是初学者,不用担心记不住以上整个命令列表,可以 ...