标签 Vim 下的文章

作为 Vi 的升级版,Vim 毫无争议是 Linux 中最受欢迎的命令行编辑器之一。除了是一个多功能编辑器外,世界各地的软件开发者将 Vim 当做 IDE( 集成开发环境 Integrated Development Environment )来使用。

事实上,因为 Vim 可以通过插件来扩展其自身功能才使得它如此功能强大。不用说,肯定有那么几个 Vim 插件是旨在提高用户的编程体验的。

特别是对于刚刚使用 Vim 或者使用 Vim 做开发的的软件开发者来说,我们将在本教程中讨论一些非常有用的 Vim 插件,具体请看例示。

请注意:本教程中列举的所有例示、命令和说明都是在 Ubuntu 16.04 环境下进行测试的,并且,我们使用的 Vim 版本是 7.4。

插件安装设置

这是为新用户准备的,假设他们不知道如何安装 Vim 插件。所以,首先,就是给出一些完成安装设置的步骤。

  • 在你的家目录下创建 .vim 目录,并在其中创建子目录 autoloadbundle
  • 然后,在 autoload 放置 pathogen.vim 文件,这个文件可以从此处 下载。
  • 最后,在你的家目录创建 .vimrc 文件,并添加以下内容。
call pathogen#infect() 

Vim plugin installation

至此,你已完成了 Vim 插件安装的准备工作。

注意:我们已经讨论了使用 Pathogen 管理 Vim 插件。当然还有其他的插件管理工具——欲了解,请访问此处

现在已经全部设置完毕,就让我们来讨论两个好用的 Vim 插件吧。

Vim 标签侧边栏(Tagbar)插件

首先就是标签侧边栏(Tagbar)插件。该插件能够让你浏览源文件包含的标签,从而提供该源文件的结构简览。其官网的插件说明是这样说的:“它通过创建侧边栏,然后以一定顺序展示从当前文件以 ctags 提取的标签来完成这一功能。这意味着,比如,C++ 中的方法将展示在其自身所定义在的类里边。”

听起来很酷,不是吗?让我们来看看该怎么安装它。

标签侧边栏(Tagbar)的安装过程是相当容易的——你只需要运行下列命令:

cd ~/.vim/bundle/

git clone git://github.com/majutsushi/tagbar

安装完之后就可以使用了,你可以在 Vim 中打开一个 .cpp 文件来测试它:进入命令模式,然后运行 :TagbarOpen 命令。以下是运行 :TagbarOpen 命令之后出现侧边栏(右侧) 的效果图。

Vim tagbar plugin

使用 :TagbarClose 可以关闭侧边栏。值得一提的是,可以使用 :TagbarOpen fj 命令打开侧边栏来打开它的跳转(shift control)功能。也就是说,你可以很方便的浏览当前文件包含的标签——在对应的标签上按下 Enter 键,然后在左侧的源代码窗口跳转到对应的位置。

假如你想要反复地开关侧边栏,你可以使用 :TagbarToggle 命令,而不用交替的使用 :TagbarOpen:TagbarClose 命令。

如果你觉得输入这些命令很费时间,你可以为 :TagbarToggle 命令创建快捷键。比如,添加以下内容到 .vimrc 文件中:

nmap <F8> :TagbarToggle<CR>

这样,你就可以用 F8 来切换标签侧边栏(Tagbar)了。

更进一步,有时候你可能会注意到某个标签前边有一个 +- 或者 # 符号。比如,以下截图(取自该插件的官网)展示了一些前边有 + 号的标签。

Toggle Tagbar window

这些符号基本是用来表明一个特定标签的可见性信息。特别是 + 表示该类是 public 的,而 - 表示一个 private 类。# 则是表示一个 protected 类。

以下是使用标签侧边栏(Tagbar)的一些注意事项:

  • 该插件的官网早就有说明:“标签侧边栏(Tagbar)并非是管理标签(tags)文件而设计,它只是在内存中动态创建所需的标签,而非创建任何文件。标签(tags)文件的管理有其他插件提供支持。”
  • 低于 7.0.167 版本的 Vim 和标签侧边栏(Tagbar)插件存在着一个兼容性问题。根据官网:“如果你受到此问题的影响,请使用代替版:下载 zip 压缩包。这对应到 2.2 版本,但由于大量的依赖变更,它可能不会再升级。”
  • 如果你在加载该插件时遇到这样的错误:未找到 ctags!(Tagbar: Exuberant ctags not found!)。你可以从 此处下载并安装 ctags 来修复错误。
  • 获取更多信息请访问 这里

Vim 界定符自动补齐(delimitMate)插件

下一个要介绍的插件就是界定符自动补齐(delimitMate)。该插件在 Vim 插入模式下提供引号、圆括号和方括号等界定符自动补齐功能。

该插件官网说:“它同时也提供一些相关的特性让你在输入模式下变得更加便捷,比如语法纠错(在注释区或者其他的可配置区不会自动插入结束界定符)、回车和空格填充(默认关闭)等。”

安装步骤与之前介绍的相似:

cd ~/.vim/bundle/

git clone git://github.com/Raimondi/delimitMate.git

一旦你成功安装这个插件(即上述命令执行成功),你就不需要进行任何配置了——当 Vim 启动时会自动加载这个插件。

至此,在你使用 Vim 的任何时候,只要你输入一个双引号、单引号、单号、圆括号、方括号,它们都会自动补齐。

你可以自己配置界定符自动补齐(delimitMate)。比如,你可以添加需要自动补齐的符号列表,阻止自动加载该插件,对指定类型文件关闭该插件等。想了解如何配置这些(或者其他更多的配置),请阅读该插件的详细文档——运行 :help delimitMate 即可。

上述命令会将你的 Vim 窗口水平分割成两个,上边一个包含我们所说的文档。

Vim deliMate Plugin

结论

本文之中提到的两个插件,Tagbar 需要花费较多时间来适应——你应该会同样这个说法。但只要正确设置好它(这意味着你像是有了快捷键一样方便),就容易使用了。至于 delimitMate,不需要任何要求就可以上手。

本教程就是向你展示 Vim 如何高效能的想法。除了本文中提及的,仍然还有许多开发者可用的插件,我们将在下一个部分进行讨论。假如你正在使用一个关于开发的 Vim 插件,并希望广为人知,请在下方留下评论。

我们将在本教程的第二部分讲到 语法高亮插件:Syntastic


via: https://www.howtoforge.com/tutorial/vim-editor-plugins-for-software-developers/

作者:Ansh 译者:GHLandy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

十年以后,Vim 终于发布了一个新的大版本 8.0,结束了从 2006 年 5 月 7 日开始的 7.0 世代。虽然这十年间,Vim 也一直在不断更新,从 7.0 到三年前的 7.4,每隔一两年或两三年就会有个小版本更新,但是这次跨越大版本更新,带来了不少新的特性,据说有一些是从其它的 Vi 流派吸收来的特性。

什么是 Vim?

虽然说我认为能看到这篇文章的人应该都知道 Vim 是什么,不过作为一篇正式宣告 Vim 8.0 发布的新闻,我还是郑重其事的来给 Vim 做个说明吧。

Vim 是经典的 UNIX 编辑器 Vi 的深度改良版本。它增加了许多功能,包括:多级撤销、格式高亮、命令行历史、在线帮助、拼写检查、文件名补完、块操作、脚本支持,等等。除了字符界面版本之外,它也有图形界面版本(比如 gVim)。虽然 Vi 还在继续维护当中,但是大部分人都只在使用 Vim 了,你所见到和听到的大多是指 Vim——虽然你的命令名可能是 Vi。

这个编辑器常用于程序员、系统管理员、黑客们进行编程和文本编辑。不像某些编辑器,它所有的命令都采用普通的键盘字符,因此在你的如飞般的十指之下,它的输入和操作速度非常快。当然,你也可以将功能键映射到某些命令上,甚至还可以支持鼠标。

除了 Linux 之外,Vim 还可以运行在 MS-Windows (NT、2000、XP、Vista、7、8、10)、苹果、VMS 和几乎所有的 UNIX 分支上。 Vim 的旧版本还可以运行在 MS-DOS、MS-Windows 95/98/Me、Amiga DOS、Atari MiNT、BeOS、RISC OS 和 OS/2 上,不过新版本不再支持了。

主要更新

8.0 版本中除了大量的细节改进和错误修复以外,主要支持以下的新功能:

支持异步 I/O 和 通道 channel

Vim 现在可以和后台的其它进程进行消息交互。这样就可以开发一个运行在后台的服务器,并将结果发回给 Vim,这种交互方式称之为 通道 channel 。在通道中使用 JSON 传递消息,因此你可以用任何一种语言来开发后台服务器,只需要它支持 JSON 即可。通过支持这种技术可以实现一些功能非常复杂的插件。

任务

Vim 现在也能启动一个任务,并与之通讯或停止它。比如说,可以启动一个用于自动补完、格式检查等功能的进程。在任务和 Vim 之间的通讯是通过通道完成的。

定时器

另外一个异步工作的是 定时器 timer ,可以启动一个定时器并不断重复调用某个函数。比如:let tempTimer = timer_start(4000, 'CheckTemp')

Partial

Vim 已经有了一个 Funcref 功能,这是一个函数引用。partial 也是一个函数引用,但是它可以绑定参数或字典。这对于频道或定时器的回调很有用。 比如:let tempTimer = timer_start(4000, function('CheckTemp', ['out']))

Lambda 和闭包

lambda 是创建函数最快的方式,比如:{args -> expr}。它对于 filter() 和 map() 很有用,而且还支持函数参数。如:call filter(mylist, {idx, val -> val > 20})

lambda 可以使用定义 lambda 表达式范围内的变量,这常被称之为 闭包 closure

插件包

插件越来越多了,为了更好的管理插件,因此支持了插件包的支持。

窗口 ID

以前 Vim 中的窗口只能通过数字编号来访问,当打开、关闭或移动窗口时,这个数字也随之而变。现在每个窗口都有了一个唯一的 ID,可以更方便的找到它们。

折行缩进

新增的 'breakindent' 选项可以保证在折行时维持缩进不变。

Windows:支持 DirectX

新增的 'renderoptions' 选项可以在 Windows 上切换到 DirectX (DirectWrite)引擎上。

支持 GTK+ 3

一般用户很难注意到 GTK+ 3 和 GTK+ 2 的区别。对这两者的配置仍然都支持。

更多的变化细节,可以参考这里

下载

得到最新版本的 Vim 的最好方式是使用 Git :

git clone https://github.com/vim/vim.git 

更多信息可参考: http://www.vim.org/git.php

UNIX/Linux

源代码及运行时文件: <ftp://ftp.vim.org/pub/vim/unix/vim-8.0.tar.bz2> 。

在 Linux 下,你总可以使用你的软件包管理器来安装最新的 Vim 8.0,不过如果你的发行版仓库还没有提供的新的 8.0 的话,你可以享受一下自己编译的乐趣。

如果你希望按照你自己的想法定制一个 Vim,那你可以下载源代码,并在 src 目录里面进行编译,可以参考 src/INSTALL 了解如何编译和安装。

Windows

安装程序:<ftp://ftp.vim.org/pub/vim/pc/gvim80.exe>

运行时文件: <ftp://ftp.vim.org/pub/vim/pc/vim80rt.zip>

Windows 95/98/NT/2000/XP/7 图形界面版: ftp://ftp.vim.org/pub/vim/pc/gvim80.zip

带有 OLE 支持的版本: <ftp://ftp.vim.org/pub/vim/pc/gvim80ole.zip>

Windows NT/2000/XP/7 字符界面版:<ftp://ftp.vim.org/pub/vim/pc/vim80w32.zip>

8.0 不再支持的版本

  • 16 位的 DOS、OS/2 和 Amiga 版本
  • 32 位的 MS-DOS/Windows 95/98 的字符界面版
  • 16 位的 MS-Windows 版本

文档与帮助

对于初学者来说,有一个叫 vimtutor 的一小时教程可以看看(当然是英文的),请通过 :help tutor 了解更多信息。

学习 Vim 的最好方式之一是在 Vim 中使用:help,如果你还没有 Vim 二进制程序,你也可以看看 runtime/doc/help.txt,它包含了对其它文档的指引。这个用户手册就像一本书一样,推荐使用它来学习 Vim。详见 :help user-manual

当我刚刚开始用 vi 文本编辑器的时候,我憎恨它!我认为这是有史以来设计上最痛苦和反人类的编辑器。但我还是决定我必须学会它,因为如果你使用的是 Unix,vi 无处不在并且是唯一一个保证你可以使用的编辑器。在 1998 年是如此,但是直到今天 vi 也仍然是可用的,现有的几乎每个发行版中,vi 基本上都是基础安装的一部分。

在我学会能使用任何功能前,我已经在 vi 上花费差不多 1 个月的时间,但是我仍然不喜欢它。不过那时我已经意识到有个强大的编辑器隐藏在这个古怪的外表后面。所以我坚持使用它,并且最终发现一旦你知道你在干什么,它就是一个快的令人难以置信的编辑器。

“vi” 这个名称是 “ 可视 visual ” 的缩写。在 vi 出现的时候,行编辑器是很普遍的,能一次性显示并编辑多个行是非同寻常的。Vim,来自“Vi IMproved”的缩写,最初由 Bram Moolenaar 发布于 1991 年,它成为了主要的仿 vi 软件,并且扩展了这个强大的编辑器已有的功能。Vim 强大的正则表达式和“:”命令行语法开始于行编辑和电传打字机时代。

Vim,有 40 年的历史了,有足够的时间发展出海量而复杂的技巧,即使是懂得最多的用户都不能完全掌握它。这里列出了一些爱 Vim 的理由:

  1. 配色方案:你可能知道 Vim 有彩色语法高亮。但你知道可以下载数以百计的配色方案么?在这找到些更好的
  2. 你再也不需要让你的手离开键盘或者去碰触鼠标。
  3. Vi 或者 Vim 存在任何地方,甚至在 OpenWRT 里面也有 vi(好吧,其实是在 BusyBox中,它挺好用的)。
  4. Vimscript:你可能会想重映射几个键,但是你知道 Vim 有自己的编程语言么?你可以重新定义你的编辑器的行为,或者创造特定语言的编辑器扩展。(最近我在定制 Vim 用于 Ansible 的行为。)学习这个语言最佳的切入点是看 Steve Losh 著名的书《Learn Vimscript the Hard Way》。
  5. Vim 有插件。使用 vundle(我用的就是它)或者 Pathogen 来管理你的插件来提升 Vim 的功能。
  6. 插件可以将 git(或者你选择的 VCS)集成到 Vim 中。
  7. 有庞大而活跃的线上社区,如果你在线上提问关于 Vim 的问题,肯定会有人回答。

我一开始讨厌 vi 的可笑之处在于,这 5 年来不断的在尝试新的编辑器中碰壁,总是想找到“一些更好的”。我从来没有像讨厌 vi 一样讨厌过其它的编辑器,现在我已经使用它 17 年了,因为我想象不出一个更好的编辑器。额,或许有稍微好一点的:可以尝试下 Neovim -这是未来的主流。看起来 Bram Moolenaar 将会把 Neovim 的大部分融入到 Vim 第 8 版中,这意味着将会在现有的代码基础上减少 30%、更好的代码补全功能、真正的异步、内置终端、内置鼠标支持、完全兼容。

在本文作者在多伦多的 LinuxCon 演讲中(LCTT 译注:LinuxCon 是 Linux 基金会举办的年度会议),他解释了一些在你可能错过的、过去四十年增加的杂乱的扩展和改进。这个内容不适合初学者,所以如果你不知道为什么“hjklia:wq”是很重要的,这就可能不是讲给你听的。它还会涉及一点关于 vi 的历史,因为知道一些历史能帮助我们理解我们的处境。关注他的演讲能让你知道如何使你最喜欢的编辑器更好更快。


via: https://opensource.com/business/16/8/7-reasons-love-vim

作者:Giles Orr 译者:hkurj 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

文本编辑软件在任何操作系统上都是必备的软件。我们在 Linux 上不缺乏非常现代化的编辑软件,但是它们都是基于 GUI(图形界面)的编辑软件。

正如你所了解的,Linux 真正的魅力在于命令行。当你正在用命令行工作时,你就需要一个可以在控制台窗口运行的文本编辑器。

正因为这个目的,我们准备了一个基于 Linux 命令行的文本编辑器清单。

VIM

如果你已经使用 Linux 有一段时间,那么你肯定听到过 Vim 。Vim 是一个高度可配置的、跨平台的、高效率的文本编辑器。

几乎所有的 Linux 发行版本都已经内置了 Vim ,由于其特性之丰富,它已经变得非常流行了。

Vim 用户界面

Vim 可能会让第一次使用它的人感到非常痛苦。我记得我第一次尝试使用 Vim 编辑一个文本文件时,我是非常困惑的。我不能用 Vim 输入一个字母,更有趣的是,我甚至不知道该怎么关闭它。如果你准备使用 Vim ,你需要有决心跨过一个陡峭的学习路线。

但是一旦你经历过了那些,通过梳理一些文档,记住它的命令和快捷键,你会发现这段学习经历是非常值得的。你可以将 Vim 按照你的意愿进行改造:配置一个让你看起来舒服的界面,通过使用脚本或者插件等来提高工作效率。Vim 支持格式高亮,宏记录和操作记录。

在Vim官网上,它是这样介绍的:

Vim: The power tool for everyone!

如何使用它完全取决于你。你可以仅仅使用它作为文本编辑器,或者你可以将它打造成一个完善的IDE( 集成开发环境 Integrated Development Environment )。

GNU EMACS

GNU Emacs 毫无疑问是非常强大的文本编辑器之一。如果你听说过 Vim 和 Emacs ,你应该知道这两个编辑器都拥有非常忠诚的粉丝基础,并且他们对于文本编辑器的选择非常看重。你也可以在互联网上找到大量关于他们的段子:

Vim vs Emacs

Emacs 是一个跨平台的、既有有图形界面也有命令行界面的软件。它也拥有非常多的特性,更重要的是,可扩展!

Emacs 用户界面

像 Vim一样,Emacs 也需要经历一个陡峭的学习路线。但是一旦你掌握了它,你就能完全体会到它的强大。Emacs 可以处理几乎所有类型文本文件。它的界面可以定制以适应你的工作流。它也支持宏记录和快捷键。

Emacs 独特的特性是它可以“变形”成和文本编辑器完全不同的的东西。有大量的模块可使它在不同的场景下成为不同的应用,例如:计算器、新闻阅读器、文字处理器等。你甚至都可以在 Emacs 里面玩游戏。

NANO

如果说到简易方便的软件,Nano 就是一个。不像 Vim 和 Emacs,nano 的学习曲线是平滑的。

如果你仅仅是想创建和编辑一个文本文件,不想给自己找太多挑战,Nano 估计是最适合你的了。

Nano 用户界面

Nano 可用的快捷键都在用户界面的下方展示出来了。Nano 仅仅拥有最基础的文本编辑软件的功能。

它是非常小巧的,非常适合编辑系统配置文件。对于那些不需要复杂的命令行编辑功能的人来说,Nano 是完美配备。

其它

这里还有一些我想要提及其它编辑器:

The Nice Editor (ne): 官网是这样介绍的:

如果你有足够的资料,也有使用 Emacs 的耐心或使用 Vim 的良好心态,那么 ne 可能不适合你。

基本上 ne 拥有像 Vim 和 Emacs 一样多的高级功能,包括:脚本和宏记录。但是它有更为直观的操作方式和平滑的学习路线。

你认为呢?

我知道,如果你是一个熟练的 Linux 用户,你可以会说还有很多应该被列入 “Linux 最好的命令行编辑器”清单上。因此我想跟你说,如果你还知道其他的 Linux 命令行文本编辑器,你是否愿意跟我们一同分享?


via: https://itsfoss.com/command-line-text-editors-linux/

作者:Munif Tanjim 译者:chenzhijun 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

多年来,我一直想学 Vim。如今 Vim 是我最喜欢的 Linux 文本编辑器,也是开发者和系统管理者最喜爱的开源工具。我说的学习,指的是真正意义上的学习。想要精通确实很难,所以我只想要达到熟练的水平。我使用了这么多年的 Linux ,我会的也仅仅只是打开一个文件,使用上下左右箭头按键来移动光标,切换到插入模式,更改一些文本,保存,然后退出。

但那只是 Vim 的最最基本的操作。我的技能水平只能让我在终端使用 Vim 修改文本,但是它并没有任何一个我想象中强大的文本处理功能。这样我完全无法用 Vim 发挥出胜出 Pico 和 Nano 的能力。

所以到底为什么要学习 Vim?因为我花费了相当多的时间用于编辑文本,而且我知道还有很大的效率提升空间。为什么不选择 Emacs,或者是更为现代化的编辑器例如 Atom?因为 Vim 适合我,至少我有一丁点的使用经验。而且,很重要的一点就是,在我需要处理的系统上很少碰见没有装 Vim 或者它的弱化版(Vi)。如果你有强烈的欲望想学习对你来说更给力的 Emacs,我希望这些对于 Emacs 同类编辑器的建议能对你有所帮助。

花了几周的时间专注提高我的 Vim 使用技巧之后,我想分享的第一个建议就是必须使用它。虽然这看起来就是明知故问的回答,但事实上它比我所预想的计划要困难一些。我的大多数工作是在网页浏览器上进行的,而且每次我需要在浏览器之外打开并编辑一段文本时,就需要避免下意识地打开 Gedit。Gedit 已经放在了我的快速启动栏中,所以第一步就是移除这个快捷方式,然后替换成 Vim 的。

为了更好的学习 Vim,我尝试了很多。如果你也正想学习,以下列举了一些作为推荐。

Vimtutor

通常如何开始学习最好就是使用应用本身。我找到一个小的应用叫 Vimtutor,当你在学习编辑一个文本时它能辅导你一些基础知识,它向我展示了很多我这些年都忽视的基础命令。Vimtutor 一般在有 Vim 的地方都能找到它,如果你的系统上没有 Vimtutor,Vimtutor 可以很容易从你的包管理器上安装。

GVim

我知道并不是每个人都认同这个,但就是它让我从使用终端中的 Vim 转战到使用 GVim 来满足我基本编辑需求。反对者表示 GVim 鼓励使用鼠标,而 Vim 主要是为键盘党设计的。但是我能通过 GVim 的下拉菜单快速找到想找的指令,并且 GVim 可以提醒我正确的指令然后通过敲键盘执行它。努力学习一个新的编辑器然后陷入无法解决的困境,这种感觉并不好受。每隔几分钟读一下 man 出来的文字或者使用搜索引擎来提醒你该用的按键序列也并不是最好的学习新事物的方法。

键盘表

当我转战 GVim,我发现有一个键盘的“速查表”来提醒我最基础的按键很是便利。网上有很多这种可用的表,你可以下载、打印,然后贴在你身边的某一处地方。但是为了我的笔记本键盘,我选择买一沓便签纸。这些便签纸在美国不到 10 美元,当我使用键盘编辑文本,尝试新的命令的时候,可以随时提醒我。

vim cheat sheet

Vimium

上文提到,我工作都在浏览器上进行。其中一条我觉得很有帮助的建议就是,使用 Vimium 来用增强使用 Vim 的体验。Vimium 是 Chrome 浏览器上的一个开源插件,能用 Vim 的指令快捷操作 Chrome。我发现我只用了几次使用快捷键切换上下文,就好像比之前更熟悉这些快捷键了。同样的扩展 Firefox 上也有,例如 Vimerator

Vimium

其它人

毫无疑问,最好的学习方法就是求助于在你之前探索过的人,让他给你建议、反馈和解决方法。

如果你住在一个大城市,那么附近可能会有一个 Vim meetup 小组,或者还有 Freenode IRC 上的 #vim 频道。#vim 频道是 Freenode 上最活跃的频道之一,那上面可以针对你个人的问题来提供帮助。听上面的人发发牢骚或者看看别人尝试解决自己没有遇到过的问题,仅仅是这样我都觉得很有趣。


那么,现在怎么样了?到现在为止还不错。为它所花的时间是否值得就在于之后它为你节省了多少时间。但是当我发现一个新的按键序列可以来跳过词,或者一些相似的小技巧,我经常会收获意外的惊喜与快乐。每天我至少可以看见,一点点的回报,正在逐渐配得上当初的付出。

Vim Advantures

学习 Vim 并不仅仅只有这些建议,还有很多。我很喜欢指引别人去 Vim Advantures,它是一种使用 Vim 按键方式进行移动的在线游戏。而在另外一天我在 Vimgifts.com 发现了一个非常神奇的虚拟学习工具,那可能就是你真正想要的:用一个小小的 gif 动图来描述 Vim 操作。

你有花时间学习 Vim 吗?或者是任何需要大量键盘操作的程序?那些经过你努力后掌握的工具,你认为这些努力值得吗?效率的提高有没有达到你的预期?分享你们的故事在下面的评论区吧。


via: https://opensource.com/life/16/7/tips-getting-started-vim

作者:Jason Baker 译者:maywanting 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

几个月前, Linux 基金会发起了 LFCS ( Linux 基金会认证系统管理员 Linux Foundation Certified System administrator )认证,以帮助世界各地的人来验证他们能够在 Linux 系统上做基本的中级系统管理任务:如系统支持、第一手的故障诊断和处理、以及何时向上游支持团队提出问题的智能决策。

Learning VI Editor in Linux

在 Linux 中学习 vi 编辑器

请简要看看一下视频,里边介绍了 Linux 基金会认证的程序。

这篇文章是系列教程的第二讲,在这个部分中,我们会介绍 vi/vim 基本的文件编辑操作,帮助读者理解编辑器中的三个模式,这是 LFCS 认证考试中必须掌握的。

使用 vi/vim 执行基本的文件编辑操作

vi 是为 Unix 而生的第一个全屏文本编辑器。它的设计小巧简单,对于仅仅使用过诸如 NotePad++ 或 gedit 等图形界面的文本编辑器的用户来说,使用起来可能存在一些困难。

为了使用 vi,我们必须首先理解这个强大的程序操作中的三种模式,方便我们后边学习这个强大的文本处理软件的相关操作。

请注意,大多数的现代 Linux 发行版都集成了 vi 的变种——— vim( 改进版 VI Vi IMproved ),相比于 vi,它有更多新功能。所以,我们会在本教程中交替使用 vi 和 vim。

如果你的发行版还没有安装 vim,你可以通过以下方法来安装:

  • Ubuntu 及其衍生版:apt-get update && apt-get install vim
  • 以 Red-Hat 为基础的发行版:yum update && yum install vim
  • openSUSE :zypper update && zypper install vim

我为什么要学习 vi

至少有以下两个理由:

  1. 因为它是 POSIX 标准的一部分,所以不管你使用什么发行版 vi 总是可用的。
  2. vi 基本不消耗多少系统资源,并且允许我们仅仅通过键盘来完成任何可能的任务。

此外,vi 有着非常丰富的内置帮助手册,程序打开后就可以通过 :help 命令来查看。这个内置帮助手册比 vi/vim 的 man 页面包含了更多信息。

vi Man Pages

vi Man 页面

启动 vi

可以通过在命令提示符下输入 vi 来启动。

Start vi Editor

使用 vi 编辑器

然后按下字母 i,你就可以开始输入了。或者通过下面的方法来启动 vi:

# vi filename

这样会打开一个名为 filename 的 缓存区 buffer (稍后会详细介绍缓存区),在你编辑完成之后就可以存储在磁盘中了。

理解 vi 的三个模式

  1. 命令 command 模式中,vi 允许用户浏览该文件并输入由一个或多个字母组成的、简短的、大小写敏感的 vi 命令。这些命令的大部分都可以增加一个前缀数字表示执行次数。
    比如:yy(或Y) 复制当前的整行,3yy(或3Y) 复制当前整行和下边紧接着的两行(总共3行)。通过 Esc 键可以随时进入命令模式(而不管当前工作在什么模式下)。事实上,在命令模式下,键盘上所有的输入都被解释为命令而非文本,这往往使得初学者困惑不已。
  2. 末行 ex 模式中,我们可以处理文件(包括保存当前文件和运行外部程序)。我们必须在命令模式下输入一个冒号(:),才能进入这个模式,紧接着是要在末行模式下使用的命令。执行之后 vi 自动回到命令模式。
  3. 文本输入 insert 模式(通常在命令模式下使用字母 i 进入这个模式)中,我们可以随意输入文本。大多数的键入将以文本形式输出到屏幕(一个重要的例外是Esc键,它将退出文本编辑模式并回到命令模式)。

vi Insert Mode

vi 文本插入模式

vi 命令

下面的表格列出常用的 vi 命令。文件编辑的命令可以通过添加叹号的命令强制执行(如,:q! 命令强制退出编辑器而不保存文件)。

关键命令描述
h 或 ←光标左移一个字符
j 或 ↓光标下移一行
k 或 ↑光标上移一行
l (小写字母 L) 或 →光标右移一个字符
H光标移至屏幕顶行
L光标移至屏幕末行
G光标移至文件末行
w光标右移一个词
b光标左移一个词
0 (数字零)光标移至行首
^光标移至当前行第一个非空格字符
$光标移至当前行行尾
Ctrl-B向后翻页
Ctrl-F向前翻页
i在光标所在位置插入文本
I (大写字母 i)在当前行首插入文本
J (大写字母 j)将下一行与当前行合并(下一行上移到当前行)
a在光标所在位置后追加文本
o (小写字母 O)在当前行下边插入空白行
O (大写字母 O)在当前行上边插入空白行
r替换光标所在位置的一个字符
R从光标所在位置开始覆盖插入文本
x删除光标所在位置的字符
X立即删除光标所在位置之前(左边)的一个字符
dd剪切当前整行文本(为了之后进行粘贴)
D剪切光标所在位置到行末的文本(该命令等效于 d$
yX给出一个移动命令 X (如 hjHL 等),复制适当数量的字符、单词或者从光标开始到一定数量的行
yyY复制当前整行
p粘贴在光标所在位置之后(下一行)
P粘贴在光标所在位置之前(上一行)
. (句点)重复最后一个命令
u撤销最后一个命令
U撤销最后一行的最后一个命令,只有光标仍在最后一行才能执行。
n在查找中跳到下一个匹配项
N在查找中跳到前一个匹配项
:n下一个文件,编辑多个指定文件时,该命令加载下一个文件。
:e file加载新文件来替代当前文件
:r file将新文件的内容插入到光标所在位置的下一行
:q退出并放弃更改
:w file将当期打开的缓存区保存为file。如果是追加到已存在的文件中,则使用 :w >> file 命令
:wq保存当前文件的内容并退出。等效于 x!ZZ
:r! command执行 command 命令,并将命令的输出插入到光标所在位置的下一行

vi 选项

下列选项可以让你在运行 Vim 的时候很方便(需要写入到 ~/.vimrc 文件):

# echo set number >> ~/.vimrc
# echo syntax on >> ~/.vimrc
# echo set tabstop=4 >> ~/.vimrc
# echo set autoindent >> ~/.vimrc

vi Editor Options

vi编辑器选项

  • set number 当 vi 打开或新建文件时,显示行号。
  • syntax on 打开语法高亮(对应多个文件扩展名),以便源码文件和配置文件更具可读性。
  • set tabstop=4 设置制表符间距为 4 个空格(默认为 8)。
  • set autoindent 将前一行的缩进应用于下一行。

查找和替换

vi 具有通过查找将光标移动到(在单独一行或者整个文件中的)指定位置。它还可自动或者通过用户确认来执行文本替换。

a) 在行内查找。f 命令在当前行查找指定字符,并将光标移动到指定字符出现的位置。

例如,命令 fh 会在本行中将光标移动到字母h下一次出现的位置。注意,字母 f 和你要查找的字符都不会出现在屏幕上,但是当你按下回车的时候,要查找的字符会被高亮显示。

比如,以下是在命令模式按下 f4 之后的结果。

Search String in Vi

在 vi 中查找字符

b) 在整个文件内查找。使用 / 命令,紧接着需要查找的单词或短语。这个查找可以通过使用 n 命令或者 N 重复查找上一个查找的字符串。以下是在命令模式键入 /Jane 的查找结果。

Vi Search String in File

在 vi 中查找字符

c) vi 通过使用命令来完成多行或者整个文件的替换操作(类似于 sed)。我们可以使用以下命令,使得整个文件中的单词 “old” 替换为 “young”。

:%s/old/young/g

注意:冒号位于命令的最前面。

Vi Search and Replace

vi 的查找和替换

冒号 (:) 进入末行模式,在本例中 s 表示替换,% 是从第一行到最后一行的表示方式(也可以使用 nm 表示范围,即第 n 行到第 m 行),old 是查找模式,young 是用来替换的文本,g 表示在每个查找出来的字符串都进行替换。

另外,在命令最后增加一个 c,可以在每一个匹配项替换前进行确认。

:%s/old/young/gc

将旧文本替换为新文本前,vi/vim 会向我们显示以下信息:

Replace String in Vi

vi 中替换字符串

  • y: 执行替换(yes)
  • n: 跳过这个匹配字符的替换并转到下一个(no)
  • a: 在当前匹配字符及后边的相同项全部执行替换
  • qEsc: 取消替换
  • l (小写 L): 执行本次替换并退出
  • Ctrl-e, Ctrl-y: 下翻页,上翻页,查看相应的文本来进行替换

同时编辑多个文件

我们在命令提示符输入 vim file1 file2 file3 如下:

# vim file1 file2 file3

vim 会首先打开 file1,要跳到 file2 需用 :n 命令。当需要打开前一个文件时,:N 就可以了。

为了从 file1 跳到 file3

a) :buffers 命令会显示当前正在编辑的文件列表

:buffers

Edit Multiple Files

编辑多个文件

b) :buffer 3 命令(后边没有 s)会打开第三个文件 file3 进行编辑。

在上边的图片中,标记符号 # 表示该文件当前已被打开,但是是在后台,而 %a 标记的文件是正在被编辑的。另外,文件号(如上边例子的 3)后边的空格表示该文件还没有被打开。

vi 的临时缓存区

(LCTT 译注:临时缓存区,也叫做“命名缓存区”,或“ 寄存器 register ”)

为了复制连续的多行(比如,假设为 4 行)到一个名为 a 的临时缓存区(与文件无关),并且还要将这些行粘贴到在当前 vi 会话文件中的其它位置,我们需要:

  1. 按下 Esc 键以确认 vi 处在命令模式
  2. 将光标放在我们希望复制的第一行文本
  3. 输入 "a4yy 复制当前行和接下来的 3 行,进入一个名为 a 的缓存区。我们可以继续编辑我们的文件————我们不需要立即插入刚刚复制的行。
  4. 当到了需要使用刚刚复制的那些行的位置,在 p(小写)或 P(大写)命令前使用"a来将复制行插入到名为 a 的 缓存区:
* 输入 `"ap`,复制行将插入到光标位置所在行的下一行。
* 输入 `"aP`,复制行将插入到光标位置所在行的上一行。

如果愿意,我们可以重复上述步骤,将缓存区 a 中的内容插入到我们文件的多个位置。像本节中这样的一个临时缓存区,会在当前窗口关闭时释放掉。

总结

像我们看到的一样,vi/vim 在命令接口下是一个强大而灵活的文本编辑器。通过以下链接,随时分享你自己的技巧和评论。

参考链接


via: http://www.tecmint.com/vi-editor-usage/

作者:Gabriel Cánepa 译者:GHLandy 校对:东风唯笑, wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出