毫无疑问,学习如何在 Linux 中使用文本编辑器是必要的,因为每个系统管理员每天都要处理配置(纯文本)文件,而大多数时候都是纯粹通过命令行界面(CLI)使用一个或多个工具来完成的(例如 nano、vim 或 emacs)。
虽然 nano 可能更适合新用户,但 vim 或 emacs 由于其高级功能而更受有经验的用户青睐。
但你需要学习如何使用这些文本编辑器还有另一个原因:你可能遇到一个仅支持 CLI 的服务器,或者在基于 GUI 的 Linux 服务器或桌面环境中遇到图形用户界面(GUI)问题,而命令行是检查问题和编辑配置文件的唯一资源。
在这篇文章和一篇后续文章(共两篇)中,我们将介绍 15 个 技巧,帮助你提高 使用 vim 的技巧。我们假设你已经熟悉这个文本编辑器。
如果不了解vim,最好在继续之前先了解一下:你可能需要参考如何使用vim文本编辑器,以获取一个非常详细的入门指南。
1. 访问Vim的在线帮助
启动vim后,按下F1
或在ex模式下使用:h
进入在线帮助。你可以通过将光标放在特定部分或主题上,然后按下Ctrl+]
(即按下Ctrl
键,然后是右方括号)来跳转到特定的部分或主题。
完成后,按下Ctrl+t
返回到上一个屏幕。或者,你也可以使用:h <主题或命令>
来查找特定主题或命令。
例如,
:h x
将显示有关x(删除)命令的帮助:

而
:h substitute
将显示有关substitute命令的帮助(本文的最后一个提示)。
2. 在Vim编辑器中添加书签
如果你发现自己正在编辑一个超过一个屏幕的文件,你会很欣赏标记提供的功能。你可以将vim中的标记视为书签——一旦你将其放置在某个位置,你就可以快速轻松地返回到它。
假设你正在编辑一个300字的配置文件,出于某种原因,需要反复在30行和150行之间切换。
首先,通过在ex
模式中输入:30
,转到第30行,然后返回命令模式并按ma(m,然后a)在30行创建名为“a”的标记。
然后转到第30行(使用:250
在ex模式下),并按`a
(反引号,然后a)返回到标记a。
您可以在vim中使用小写和大写字母来识别标记(现在重复这个过程,以在第250行创建一个名为A的标记)。
您可以使用
:marks aA

正如您所见,每个标记都是通过文件上的特定行/列位置引用的,而不仅仅是通过行。
3. 在Vim中轻松清理代码
假设您正在编辑一个shell脚本,并意识到之前的开发人员在缩进方面相当糟糕。让我们看看您如何通过几个vim命令来修复它。
首先,通过将光标放在块的开始处,然后按Ctrl+v
(Ctrl,然后v)来选择一个可视块。
- 要向左缩进:按
<j
- 要向右缩进:按
<j
然后按.
(点)命令来重复缩进。所选块将仅通过一个按键向右或向左移动。
另一个使用dot命令的经典示例是当您需要删除一系列单词时:将光标放在要删除的第一个单词上,然后按下dw。
要继续删除下一个单词,只需按。
(比重复dw几次更短、更简单)。
4. 在Vim中插入Unicode字符
如果您的键盘布局不允许您轻松地在文件中插入特殊的Unicode字符,或者如果您发现自己面对的服务器的语言设置与您习惯的语言设置不同,那么这个技巧将会很有用。
要做到这一点,在插入模式下按Ctrl+v
,然后是字母u
和您想要插入的字符的十六进制数码。
您可以查看Unicode图表以获取特殊字符及其对应的数码。
例如,
Ctrl+v followed by | returns |
u0040 | @ |
u00B5 | μ |
u20AC | € |
5. 在Vim中整合外部命令输出
有时候您需要直接将外部命令的输出插入到正在使用vim编辑的文件中。
例如,我经常在脚本中创建一个名为DIR
的变量来存储脚本所在目录的绝对路径,以便稍后在脚本中使用。
要做到这一点,我使用:
:r! pwd
在ex模式中。因此,当前工作目录被插入。
另一个例子:如果您需要在脚本中的某个地方使用默认网关,您可以在当前文件中插入它,而无需退出vim,如下所示:
:!r ip route show | grep default | cut -f 3 -d " "
6. 在Vim中附加外部文件内容
如果您需要将另一个文件的内容附加到您当前正在编辑的文件中,语法与前一个提示类似。只需省略感叹号即可。
例如,要复制/etc/passwd的内容:
:r /etc/passwd
当您需要修改配置文件但希望保留原始文件以便“恢复到出厂设置”时,您可能会发现此提示有用。
7. 在Vim中搜索和替换单词
有一次考试时,我被要求打开一个包含随机数据的大型文本文件。分配的任务包括将每个单词Globe替换为Earth(是的,我仍然记得确切的词语)。
对于熟悉sed的人来说,这将会让人想起 – 在ex模式下,键入:
:%s/old/new/g
其中old是要搜索的模式,new是将替换它的字符串。
在上述描述的情况下,我使用了:
:%s/Globe/Earth/g
来完成任务。
那么如果您想在进行替换之前得到提示怎么办?很简单。只需在上述命令的末尾添加一个c,如下所示:
:%s/old/new/gc
模式的出现将被突出显示,并询问您是否要用新字符串替换它:
:%s/gacanepa/me/gc

其中
- y: yes
- n: no
- a: substitute all
- q: quit
- l: substitute this occurrence and quit
- ^E(Ctrl+E):向上滚动一屏
- ^Y(Ctrl+Y):向下滚动一屏
摘要
在本文中,我们开始回顾一些 vim 技巧和诀窍,以增强您的文本编辑技能。您可能会想到其他一些技巧,请在下面的评论框中分享,我将考虑在下一篇和此 vim 系列的最后一篇文章中涵盖它们。
Source:
https://www.tecmint.com/learn-vi-and-vim-editor-tips-and-tricks-in-linux/