介绍
「Vim」是经典的「vi」文本编辑器的改进,在编辑代码和简单文本方面非常强大,虽然它起初可能看起来模糊和困难,但由于它的语言如命令语法,它是编辑文本的最有效的方法之一。
在以前的文章中,我们讨论了 如何安装vim并执行基本编辑。
我们将假设您已经安装了vim,并熟悉上面链接的文章中讨论的基本运动和编辑命令。
先进导航
在开始新材料之前,让我们来回顾一下我们在上一篇文章中学到的简单的导航:
- 基本动作
- h:左
- l:右
- j:下
- k:上
- 其他动作
- gg:文档顶部
- G:文档底部或行号,如果一个数字放在G 前面 - w:下一个字
- e:词尽头
- 0:行开始
- $:行尽头
正如你所看到的,我们已经有相当多的运动命令,但我们也可以通过其他方式来指导运动。
我们可以通过使用这些命令将指针移动到当前可见的页面部分的不同区域:
- H:将方针移动到当前可见页面的顶部(想
高
) - M:将方针移动到当前可见页面的中间
- L:将方针移动到当前可见页面的底部(想
低
)
如果我们想移动页面而不是指针(如在滚动中),我们可以使用以下命令:
- CTRL-D:页面向下
- CTRL-U:页面向上
- CTRL-E:旋转一个行
- CTRL-Y:旋转一个行
我们还可以通过逻辑信息的块进行导航. 如果您在输入正规文本而不是代码,这可能是有用的。
- ):移动到下一个句子的开始
- (:移动到最后一个句子的开始
- ****:移动到下一个段落的开始(以空线划分)
- {:移动到最后一个段落的开始(以空线划分)
您也可以在文件中的任何点设置标记
,然后您可以将这些标记引用到跳到该点或将该点传递到接受移动的命令:
- m:输入
m
之后的字母会创建该字母的标记引用。
- 较低的字母是当前文档的特征,而较高的字母只能使用一次(它们可以用来跳到不同文档中的部分。
- ':单个引用后由标记字母(如上所述的
m
所定义),将引导器移动到包含该标记的行开头。
这些命令允许您将一个标记放置,然后在当前位置和标记之间定义的区域上标记,删除或格式化,这允许对编辑选项进行非常精细的控制。
如何管理文件
通常,当你工作时,无论是软件项目还是期刊,你想能够同时引用多个文档,Vim有几种不同的方法来做到这一点,取决于你想要如何工作。
如何管理泡沫
管理多个文件的一种方式是通过缓冲器
。缓冲器通常代表一个开放的文件进行编辑. 它们基本上是vim目前已经打开的一切,可以轻松访问。
我们用 vim 打开多个文件,如下:
1vim file1 file2 file3
每个文件都在自己的缓冲器中打开,目前我们只能看到第一个文件。
我们可以通过键入:缓冲器
来查看哪些缓冲器可用。
1:buffers
1:buffers
2 1 %a "file1" line 1
3 2 "file2" line 0
4 3 "file3" line 0
5Press ENTER or type command to continue
如果我们想检查下一个缓冲器,我们可以键入 :bn
. 这将改变到下一个缓冲器.同样,我们可以通过键入 b
然后是数字或名称切换到数字缓冲器(在上面的第一个列中),或名称。
以下是管理缓冲器的一些命令:
- :缓冲器:可用缓冲器列表
- :ls:如上所述
- :bn:切换到下一个缓冲器
- :bp:切换到以前的缓冲器
- :bfirst:切换到前一个缓冲器
- :blast:切换到最后一个缓冲器
- :bdelete:删除当前的缓冲器
- :badd:打开一个新的缓冲器,随后使用的文件名称 *_e: ::在新的缓冲器中编辑另一个文件并切换到它。
如何管理Windows
vim用于管理多个文件的单独控制机制是窗口
或视图
的概念,这允许您将当前的编辑区域分为不同的窗口,以便您可以同时查看多个缓冲器。
若要将当前的工作区分成单独的窗口,您可以键入 :split
或 :sp
. 这将打开一个新的窗口,打开当前的窗口,并更改对该窗口的焦点。
以下是我们可以用来创建和管理窗口的一些命令:
- :sp:将当前的窗口划分为两部分。在每个窗口中首先会显示相同的缓冲器。
- 以数字为前置
sp
以设置新窗口高度。 :vs*:将当前的窗口分成垂直。在每个窗口中将显示相同的缓冲器。 - 以数字为前置
vs
以设置新窗口宽度。
- CTRL-ww: 将焦点转移到下一个窗口
- **CTRL-w(运动) **: 将焦点转移到窗口的方向(h,j,kl, )表示 CTRL-wc: 关闭当前
如何管理Tabs
在vim中管理多个文档的第三个概念是标签
。不同于许多程序,在vim中,标签可以包含窗口,而不是相反。
我们可以单独管理每个标签的窗口布局. 为了创建标签,我们可以使用 :tabnew
命令打开一个新的标签。
管理 tabs 的一些简单方法是:
- :tabnew: 打开新选项卡
- :tabclose: 关闭当前选项卡
- :tabn: 切换到下一个选项卡
- gt: 切换到下一个选项卡
- :tabp: 切换到之前的选项卡
- ** gT**: 切换到之前的选项卡
- :tab ball: 打开单个选项卡中的所有缓冲器
- :tabs:列出所有可用的选项卡
随着缓冲器,窗口和标签,它有时会变得混乱,你目前正在查看哪个文件。
- CTRL-g:显示当前文件名
文件具体命令
根据您所处理的文件类型,vim 具有某些功能,可以帮助您。
简单的文本
如果你正在编辑简单的文本文档,vim可以以各种方式帮助你. 对于这个功能至关重要的功能之一是拼写检查。
要在 vim 中启用拼写检查,您可以键入:
1:set spell
要设置正在使用的语言,您可以键入:
1:set spelllang=[language abbreviation]
现在,你的文档将被检查拼写. 正常的拼写线将出现在错误的单词下。
要跳到错误的单词之间,键入:
1]s # Jump to next mistake
2[s # Jump to previous mistake
一旦你的标记器超过一个错误的单词,你可以通过键入查看拼写建议:
1z=
这会给你一个可能的匹配的列表. 您可以通过选择相关的号码来选择您想要的选项,或者您可以按 Enter 来保持该单词的状态。
如果您想将一个单词标记为 **不被错写,您可以将其添加到拼写列表中的一个。
若要将单词添加到好
单词列表中,请使用以下命令之一:
1zg # Adds word to regular dictionary
2zG # Adds word to the current session dictionary
如果您意外添加一个单词,您可以通过进入单词并键入删除它:
1zug # Remove word from regular dictionary
2zuG # Remove word from the current session dictionary
如果你发现自己需要经常键出长短语句,你可以添加一个缩写。
如果我们输入 :ab
接着是缩写和扩展,那么vim 每次我们输入缩写,然后是空间,就会输入扩展。
例如,如果我们是跟随理查德·斯托尔曼(Richard Stallman)用GNU/Linux
来纠正任何使用Linux
的贴纸,我们可以创建一个自动执行的缩写:
1:ab Linux GNU/Linux
现在,当我们键入Linux
时,vim会自动取代GNU/Linux
。
1Linux is an operating system.
变更为:
1GNU/Linux is an operating system.
如果我们发现自己专门谈到内核,但只有Linux这个词是合适的,我们可以通过键入CTRL-V
来取消扩展,然后输入空间。
1GNU/Linux is an operating system with Linux(CTRL-V) as a kernel.
如果我们不想再使用这个缩写,我们可以用这个命令删除它:
1:una Linux
现在我们的Linux
将继续是Linux
。
您可能不时需要做的事情是插入不是传统QWERTY键盘上的字符,我们称之为数字图
。您可以通过键入VIM的数字图列表:
1:digraphs
1NU ^@ 10 SH ^A 1 SX ^B 2 EX ^C 3 ET ^D 4 EQ ^E 5
2AK ^F 6 BL ^G 7 BS ^H 8 HT ^I 9 LF ^@ 10 VT ^K 11
3FF ^L 12 CR ^M 13 SO ^N 14 SI ^O 15 DL ^P 16 D1 ^Q 17
4D2 ^R 18 D3 ^S 19 D4 ^T 20 NK ^U 21 SY ^V 22 EB ^W 23
5CN ^X 24 EM ^Y 25 SB ^Z 26 EC ^[ 27 FS ^\ 28 GS ^] 29
6RS ^^ 30 US ^_ 31 SP 32 Nb # 35 DO $ 36 At @ 64
现在,您可以通过键入CTRL-k
来插入右列的任何字符,然后是左列的两个字母。
例如,在我的计算机上,要输入一个英镑符号,我可以在插入模式中输入:
1CTRL-k Pd
1£
源代码
如果您正在编码,有许多不同的东西可以帮助您与代码互动。
最基本的之一是语法突出化,您可以通过键入启用语法突出化:
1:syntax on
这应该根据被检测到的文件扩展为您的文件设置语法突出,如果你想更改正在突出的语言,你可以通过设置语言:
1:set filetype=[language]
如果您想使用系统实用程序来修改文件中的某些行,您可以使用正常模式中的 !
命令来调用它。
这个命令接受一个动作,然后将其发送到接下来的命令。
1![motion] filter
例如,要将行从当前位置到文件的末端进行排序,您可以键入:
1!G sort
排序是一个Linux命令,根据默认情况对输入进行排序。
如果我们要将命令的输出插入到文件中,请导航到您想要输出的空行。
1!!command
这将将指定的命令的输出放入文档中。
如果我们想看到一个命令的结果,但不想将其插入文档中,我们也可以使用命令模式(:)版本,这将是:
1:!command
这将向您显示命令的结果,但在完成后将您返回未更改的文档。
减少重复
通常在编辑或创建任何类型的文件时,你会发现自己重复许多相同或类似的操作。
要开始记录宏,可以键入q
,然后是引用宏的字母。
1qa # will save macro "a"
现在,您输入的任何命令将被记录为宏的一部分. 要结束宏,您可以再次键入q
。
如果我们类型:
1qa0c3wDELETED<esc>q
这将启动一个宏(保存为a
),转到行开始,并用DELETED
代替接下来的三个单词,然后退出插入模式并结束宏。
若要重新播放此宏,从当前路由器位置开始,请使用@
字符,然后是宏引用:
1@a
这将重新播放从当前位置开始的宏命令。
如果我们想创建一个在插入模式中结束的宏,我们必须以不同的方式结束宏(输入q
只会插入一个q)。
因此,如果我们要更改这行上第一段的内容,你可以有一个宏,该宏说:
1qi0f(lct)<CTRL-O>q
这会创建一个宏i
。该宏移动到当前行的开头,然后找到开头符号,然后移动到右一个字符(以移动到关头符号内)。它随后改变一切,直到关闭符号。
结论
现在你应该有一个想法,一些更复杂的方式,Vim可以帮助你. 虽然这可能看起来像很多,但它只是扫描表面。
有很多功能,我们没有触及,你不需要知道一切. 你将学习什么是重要的,根据你选择如何使用vim. 越练习和使用它每天,它会感觉更自然,它将变得更强大。