标签 Vim 下的文章

介绍在命令行编辑中使用 vi 模式。

作为一名大型开源社区的参与者,更确切地说,作为 Fedora 项目的成员,我有机会与许多人会面并讨论各种有趣的技术主题。我最喜欢的主题是“命令行”或者说 shell,因为了解人们如何熟练使用 shell 可以让你深入地了解他们的想法,他们喜欢什么样的工作流程,以及某种程度上是什么激发了他们的灵感。许多开发和运维人员在互联网上公开分享他们的“ dot 文件”(他们的 shell 配置文件的常见俚语),这将是一个有趣的协作机会,让每个人都能从对命令行有丰富经验的人中学习提示和技巧并分享快捷方式以及有效率的技巧。

今天我在这里会为你介绍 shell 中的 vi 模式。

在计算和操作系统的庞大生态系统中有很多 shell。然而,在 Linux 世界中,bash 已经成为事实上的标准,并在在撰写本文时,它是所有主要 Linux 发行版上的默认 shell。因此,它就是我所说的 shell。需要注意的是,bash 在其他类 UNIX 操作系统上也是一个相当受欢迎的选项,所以它可能跟你用的差别不大(对于 Windows 用户,可以用 cygwin)。

在探索 shell 时,首先要做的是在其中输入命令并得到输出,如下所示:

$ echo "Hello World!"
Hello World!

这是常见的练习,可能每个人都做过。没接触过的人和新手可能没有意识到 bash shell 的默认输入模式是 Emacs 模式,也就是说命令行中所用的行编辑功能都将使用 Emacs 风格的“键盘快捷键”。(行编辑功能实际上是由 GNU Readline 进行的。)

例如,如果你输入了 echo "Hello Wrld!",并意识到你想要快速跳回一个单词(空格分隔)来修改打字错误,而无需按住左箭头键,那么你可以同时按下 Alt+b,光标会将向后跳到 W

$ echo "Hello Wrld!"
              ^
        Cursor is here.

这只是使用提供给 shell 用户的诸多 Emacs 快捷键组合之一完成的。还有其他更多东西,如复制文本、粘贴文本、删除文本以及使用快捷方式来编辑文本。使用复杂的快捷键组合并记住可能看起来很愚蠢,但是在使用较长的命令或从 shell 历史记录中调用一个命令并想再次编辑执行时,它们可能会非常强大。

尽管 Emacs 的键盘绑定都不错,如果你对 Emacs 编辑器熟悉或者发现它们很容易使用也不错,但是仍有一些人觉得 “vi 风格”的键盘绑定更舒服,因为他们经常使用 vi 编辑器(通常是 vimnvim)。bash shell(再说一次,通过 GNU Readline)可以为我们提供这个功能。要启用它,需要执行命令 $ set -o vi

就像魔术一样,你现在处于 vi 模式了,现在可以使用 vi 风格的键绑定来轻松地进行编辑,以便复制文本、删除文本、并跳转到文本行中的不同位置。这与 Emacs 模式在功能方面没有太大的不同,但是它在你如何与 shell 进行交互执行操作上有一些差别,根据你的喜好这是一个强大的选择。

我们来看看先前的例子,但是在这种情况下一旦你在 shell 中进入 vi 模式,你就处于 INSERT 模式中,这意味着你可以和以前一样输入命令,现在点击 Esc 键,你将处于 NORMAL 模式,你可以自由浏览并进行文字修改。

看看先前的例子,如果你输入了 echo "Hello Wrld!",并意识到你想跳回一个单词(再说一次,用空格分隔的单词)来修复那个打字错误,那么你可以点击 Esc 从 INSERT 模式变为 NORMAL 模式。然后,您可以输入 B(即 Shift+b),光标就能像以前那样回到前面了。(有关 vi 模式的更多信息,请参阅这里。):

$ echo "Hello Wrld!"
              ^
        Cursor is here.

现在,对于 vi/vim/nvim 用户来说,你会惊喜地发现你可以一直使用相同的快捷键,而不仅仅是在编辑器中编写代码或文档的时候。如果你从未了解过这些,并且想要了解更多,那么我可能会建议你看看这个交互式 vim 教程,看看 vi 风格的编辑是否有你所不知道的。

如果你喜欢在此风格下与 shell 交互,那么你可以在主目录中的 ~/.bashrc 文件底部添加下面的行来持久设置它。

set -o vi

对于 emacs 模式的用户,希望这可以让你快速并愉快地看到 shell 的“另一面”。在结束之前,我认为每个人都应该使用任意一个让他们更有效率的编辑器和 shell 行编辑模式,如果你使用 vi 模式并且这篇文章给你展开了新的一页,那么恭喜你!现在就变得更有效率吧。

玩得愉快!


作者简介:

Adam Miller 是 Fedora 工程团队成员,专注于 Fedora 发布工程。他的工作包括下一代构建系统、自动化、RPM 包维护和基础架构部署。Adam 在山姆休斯顿州立大学完成了计算机科学学士学位与信息保障与安全科学硕士学位。他是一名红帽认证工程师(Cert#110-008-810),也是开源社区的活跃成员,并对 Fedora 项目(FAS 帐户名称:maxamillion)贡献有着悠久的历史。


via: https://opensource.com/article/17/3/fun-vi-mode-your-shell

作者:Adam Miller 译者:geekpi 校对:wxy

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

目前为止,在一系列介绍 vim 插件文章中,我们介绍了使用 Pathogen 插件管理包安装基本的 vim 插件,也提及了另外三个插件:Tagbar、delimitMateSyntastic。现在,在最后一部分,我们将介绍另一个十分有用的插件 a.vim。

请注意所有本篇教程所提及的例子、命令和指导,它们已经在 Ubuntu 16.04 测试完毕,vim 使用版本为 vim7.4 (LCTT 译注:Ubuntu 16.04 的默认版本)。

A.vim

如果你一直用像 C、C++ 这样的语言进行开发工作,你一定有这样的感触:我特么已经数不清我在头文件和源代码之间切换过多少次了。我想说的是,确实,这个操作十分基本,十分频繁。

尽管使用基于 GUI(图形界面)的 IDE(集成开发环境)非常容易通过鼠标的双击切换文件,但是如果你是资深 vim 粉,习惯用命令工作就有点尴尬了。但是不要害怕,我有秘籍--插件 a.vim。它可以让你解决尴尬,专治各种文件切换。

在我们介绍这个神器用法之前,我必须强调一点:这个插件的安装过程和我们其他篇介绍的不太一样,步骤如下:

  • 首先,你需要下载两个文件(a.vimalternate.txt),你可以在这里找到它们。
  • 接下来,创建如下目录:~/.vim/bundle/avim~/.vim/bundle/avim/doc~/.vim/bundle/avim/plugin~/.vim/bundle/autoload
  • 创建好目录之后,将 a.vim 放到 ~/.vim/bundle/avim/plugin~/.vim/bundle/autoload,以及将 alternate.txt 放到 ~/.vim/bundle/avim/doc

就是这样,如果上述步骤被你成功完成,你的系统就会安装好这个插件。

使用这个插件十分简单,你仅仅需要运行这个命令 :A 如果目前的文件是源文件(比如 test.c),这个神器就会帮你打开 test.c 对应的头文件(test.h),反之亦然。

当然咯,不是每个文件对应的头文件都存在。这种情况下,如果那你运行 :A 命令,神器就会为你新建一个文件。比如,如果 test.h 不存在,那么运行此命令就会帮你创建一个 test.h,然后打开它。

如果你不想要神器开启此功能,你可以在你的家目录的隐藏文件 .vimrc 中写入 g:alternateNonDefaultAlternate 变量,并且赋给它一个非零值即可。

还有一种情况也很普遍,你需要打开的文件并非是当前源代码的头文件。比如你目前在 test.c 你想打开 men.h 这个头文件,那么你可以输入这个命令 :IH <filename> ,毋需赘言,你肯定要在后面输入你要打开的的文件名称 <filename>

目前为止,我们讨论的功能都仅限于你当前文件和要操作的文件都在同一个目录去实现。但是,你也知道,我们还有特殊情况,我是说,许多项目中头文件与对应的源文件并不一定在同一目录下。

为了搞定这个问题,你要使用这个 g:alternateSearchPath 这个变量。官方文档是这么解释的:

这个插件可以让用户配置它的搜索源文件和头文件的搜索路径。这个搜索路径可以通过设置 g:alternateSearchPath 这个变量的值指定。默认的设定如下:

g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc' 

使用这个代码表示神器将搜索 ../source../src../include../inc 下所有与目标文件相关的文件。 g:alternateSearchPath 变量的值由前缀和路径组成,每个单元用逗号隔开。 sfr 前缀是指后面的路径是相对于目前文件的,wdr 前缀是指目录是相对于目前的工作目录, abs 是指路径是绝对路径。如果不指定前缀,那么默认为 sfr

如果我们前文所提及的特性就能让你觉得很炫酷,那我不得不告诉你,这才哪跟哪。还有一个十分有用的功能是分割 Vim 屏幕,这样你就可以同时看到头文件和相应的源文件。

哦,还有,你还可以选择垂直或者水平分割。全凭你心意。使用 :AS 命令可以水平分割,使用 :AV 可以垂直分割。

Vim.a vertical split screen

vim.a horizontal split screen

使用 :A 命令在已经打开的文件中切换。

这个插件还可以让你在同一个 Vim 窗口中不同选项卡中打开多个相应的文件,你键入这个命令 :AT

tabs in Vim with a.vim.

当然,你可以用这些命令 :AV:AS:AT,也可以使用这些命令 :IHV:IHS:IHT

最后

还有许多和编程相关的 Vim 的插件,我们在这个三篇系列主要讨论的是,如果你为你的软件开发工作安装了合适的插件,你就会明白为什么 vim 被叫做编辑器之神。

当然,我们在这只关注编程方面,对于那些把 Vim 当做日常文档编辑器的人来说,你也应该了解一些 Vim 的插件,让你的编辑更好,更高效.我们就改日再谈这个问题吧。


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

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

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

Vim——正如你可能已经了解的那样——是一个包含很多特性的强大的编辑器。我们已经写了好多关于 Vim 的教程,覆盖了 基本用法插件, 还有一些 其他的 有用的 特性。鉴于 Vim 提供了多如海洋的特性,我们总能找到一些有用的东西来和我们的读者分享。

在这篇教程中,我们将会重点关注你如何在编辑窗口执行外部的命令,并且访问命令行 shell。

但是在我们开始之前,很有必要提醒一下,在这篇教程中提及到的所有例子、命令行和说明,我们已经在 Ubuntu 14.04 上测试过,我们使用的的 Vim 版本是 7.4 。

在 Vim 中执行外部命令

有的时候,你可能需要在 Vim 编辑窗口中执行外部的命令。例如,想象一下这种场景:你已经在 Vim 中打开了一个文件,并做了一些修改,然后等你尝试保存这些修改的时候,Vim 抛出一个错误说你没有足够的权限。

在 Vim 中执行命令行

现在,退出当前的 vim 会话,重新使用足够的权限打开文件将意味着你会丢失所做的所有修改,所以,你可能赞同,在大多数情况不是只有一个选择。像这样的情况,在编辑器内部运行外部命令的能力将会派上用场。

稍后我们再回来上面的用例,但是现在,让我们了解下如何在 vim 中运行基本的命令。

假设你在编辑一个文件,希望知道这个文件包含的行数、单词数和字符数。为了达到这个目的,在 vim 的命令行模式下,只需要输入冒号 :,接下来一个感叹号 !,最后是要执行的命令(这个例子中使用的是 wc)和紧接着的文件名(使用 % 表示当前文件)。

:! wc %

这是一个例子:

填入的上面提及的命令行准备执行:

命令准备在 vim 中执行

下面是终端上的输出:

命令输出

在你看到输出之后,输入回车键,你将会退回到你的 vim 会话中。

你正在编写代码或者脚本,并且希望尽快知道这段代码或者脚本是否包含编译时错误或者语法错误,这个时候,这种特性真的很方便。

继续,如果需求是添加输出到文件中,使用 :read ! 命令。接下来是一个例子:

:read ! wc %

read 命令会把外部命令的输出作为新的一行插入到编辑的文件中的当前行的下面一行。如果你愿意,你也可以指定一个特定的行号——输出将会添加到特定行之后。

例如,下面的命令将会在文件的第二行之后添加 wc 的输出。

:2read ! wc %

注意: 使用 $ 在最后一行插入, 0 在第一行前面插入。

现在,回到最开始我们讨论的一个用例,下面的命令将会帮助你保存文件而不需要先关闭文件(这将意味着没有保存的内容不会丢失)然后使用 sudo 命令重新打开。

:w ! sudo tee %

在 Vim 中访问 shell

除了可以执行单独的命令,你也可以在 vim 中放入自己新创建的 shell。为了达到这种目的,在编辑器中你必须要做的是运行以下的命令:

:shell

或者:

:sh

当你执行完了你的 shell 任务,输入 exit —— 这将带你回到原来离开的 Vim 会话中。

要谨记的漏洞

虽然在真实世界中,能够访问的 shell 绝对符合它们的用户权限,但是它也可以被用于提权技术。正如我们在早期的一篇文章(在 sudoedit 上)解释的那样,即使你提供给一个用户 sudo 的权限只是通过 Vim 编辑一个文件,他们仍可以使用这项技术从编辑器中运行一个新的 shell,而且他们可以做 root 用户或者管理员用户可以做的所有内容。

总结

能够在 Vim 中运行外部命令在好多场景中(有些场景我们已经在这篇文章中提及了)都是一个很有用的特性。这个功能的学习曲线并不麻烦,所以初学者和有经验的用户都可以好好使用它。

你现在使用这个特性有一段时间了吗?你是否有一些东西想分享呢?请在下面的评论中留下你的想法。


via: https://www.howtoforge.com/tutorial/how-to-access-shell-or-run-external-commands-from-within-vim/

作者:Himanshu Arora 译者:yangmingming 校对:wxy

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

尽管目前我们已经涉及 Vim 的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的 Vim 教程系列,本文我们将讨论 Vim 提供的多种搜索技术。

不过在此之前,请注意文中涉及到的所有的例子、命令、指令均是在 Ubuntu 14.04,Vim 7.4 下测试的。

Vim 中的基础搜索操作

当你在 Vim 中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先按下 Esc 键从插入模式中退出(如果你正处于插入模式中)。之后输入 / 并紧接着输入你要搜索的单词或搜索模式。

例如,如果你想要搜索的单词是 linux,下图显示的就是在 Vim 窗口底部的搜索命令:

Search for words in vim

敲击回车键之后,你会看到 Vim 会将光标停留在从光标在插入模式中的位置开始,找到的包含此单词的第一行。如果你刚刚打开一个文件并且立即开始了搜索操作,搜索将从文件的首行开始。

如果想要移动到下一处包含被搜索单词位置,按 n 键。当你遍历完所有被搜索模板所在之处,继续按 n 键 Vim 将重复搜索操作,光标将回到第一次搜索结果出现位置。

Move to next search hit

在遍历搜索结果时,如果你想要回到上一匹配处,按 N (即 shift + n)。同时,值得注意的是不管在什么时候,你都可以输入 ggn 来跳转到第一个匹配处,或者 GN 来跳转到最后一处。

当你恰好在文件的底部,而且想要逆向搜索的情况下,使用 ? 代替 / 来开始搜索。下图是一个例子:

search backwards

自定义你的搜索

1、 高亮搜索结果

尽管通过 nN 从被搜索单词或模式的匹配处跳转到另一处很简单,但是如果匹配处能够高亮就更加人性化了。例如,请看下附截图:

Search Highlighting in VIM

这可以通过设置 hlsearch 变量来实现,例如在普通/命令行模式中执行下述命令:

:set hlsearch

set hlsearch

2、使搜索不区分大小写

在 Vim 中进行搜索默认是区分大小写的。这就意味着如果我要搜索 linux,那么 Linux 是不会匹配的。然而,如果这不是你想要的搜索方式,你可以使用如下命令来使搜索变得不区分大小写:

:set ignorecase

所以当我设置 ignorecase 变量后再使用前边提到的命令,搜索 linux,那么 Linux 所在处也会被高亮。

search case-insensitive

3、智能大小写搜索

Vim 提供了一个功能,只有当要搜索的单词 / 模板包含大写字母时,编辑器才会区分大小写。要想实现这种功能,必须先设置 ignorecase,再接着设置 smartcase 变量。

:set ignorecase
:set smartcase

例如,如果一个文件中既包含 LINUX 也包含 linux,在开启智能大小写搜索功能时,如果使用 /LINUX 进行搜索,只有单词 LINUX 处会被搜到。反之,如果搜索 /linux,那么不论大小写的搜索结果都会被匹配。

4、递进搜索

就如谷歌一样,随着你输入查询字串(字串随你每输入一个字符不断更新)显示不同的搜索结果,Vim 也同样提供了递进搜索。要想使用这种特性,你必须在搜索前执行下述命令:

:set incsearch

一些很酷的在 Vim 中搜索的小技巧

你可能会发现还有一些其他的与搜索相关的小技巧很有用。

开始吧!如果你想要搜索一个文件中的一个单词,但是又不想输入它,你只需要将你的光标移到这个单词下然后按 * (或者 shift + 8)。如果你想要启动一次部分搜索(例如:同时搜索 interminal),那你需要将光标移到到单词(在本例中, in)下,然后通过在键盘上按 g* (按一次 g 然后不断按 * )。

注意:如果你想要逆向搜索,按 # 或者 g#

这里有个视频,你可以看看:

下一个,只要你想要,你可以获得所有被搜索单词或模式匹配处所在的行和行号的一个列表。这可以在你开始搜索后通过按 [I 来实现。如下图是一个列表结果如何在 Vim 窗口底部被分组和显示的例子:

grouped search results

接下来,你可能已经得知,Vim 默认是环形搜索的,意味着在到达文件结尾处(或者被搜索单词的最后一处匹配)时,如果继续按 “搜索下一个” 会将光标再次带回第一处匹配处。如果你希望禁止环形搜索,可以使用如下命令:

:set nowrapscan

再次开启环形搜索,使用如下命令即可:

:set wrapscan

最后,假设你想要对文件中已经存在的单词做一点小小的修改,然后对修改后的单词执行搜索操作,一种方法是输入 / 与要搜索的单词。但是如果这个单词又长又复杂,那么可能需要一点时间来输入它。

一个简单的办法是将光标移到你想要略微修改的单词下,按 / 之后再按 Ctrl + r 最后按 Ctrl + w。这个在光标下的单词不仅仅会被拷贝,也会被复制到 / 后,允许你对它进行修改并且继续进行搜索操作。

如果想要获得更多小技巧(包括如何使用鼠标来使在 Vim 中的操作变得简单),请前往 Vim 官方文档

结语

当然,没有人希望你死记硬背这里提到的所有小技巧。你应该做的是,从一个你认为对你最有益的技巧开始不断练习。当它成为一种习惯并且嵌入你的记忆后,重新来这儿找找你应该开始学习的下一个技巧。

你知道其他像这样的技巧吗?并且希望能够和大家一起分享?那就在下边留言吧!


via: https://www.howtoforge.com/tutorial/perform-search-operations-in-vim/

作者:Himanshu Arora 译者:xiaow6 校对:wxy

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

目前,在我们讲述 Vim 的教程中,讨论过编辑器的 模式行 Modeline 功能以及怎样用插件来扩展 Vim 的功能集。可正如我们所知,Vim 提供了非常多的内置功能:因此在本教程中更进一步,我们来谈谈在该编辑器启动时的可用模式。

但在我们开始之前,请注意在本教程中提及的所有例子、命令及用法说明都是在 Ubuntu 14.04 上测试的,我们测试用的 Vim 版本是 7.4 。

Vim 中的兼容模式与不兼容模式

为了更好理解上述的 Vim 模式,你有必要先去了解下此编辑器初始化过程的一个重要方面。

系统级及本地 vimrc 文件

当 Vim 启动时,编辑器会去搜索一个系统级的 vimrc 文件来进行系统范围内的默认初始化工作。

这个文件通常在你系统里 $VIM/vimrc 的路径下,如果没在那里,那你可以通过在 Vim 里面运行 :version 命令来找到它的正确存放位置。比如说,在我这里,这个命令的相关部分的输出结果如下:

...
...
...
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
2nd user vimrc file: "~/.vim/vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
...
...
...

可以看到那个系统 vimrc 文件确实位于 $VIM/vimrc ,但我检查了我机子上没设置过 $VIM 环境变量。所以在这个例子里 - 正如你在上面的输出所看到的 - $VIM 在我这的路径是 /usr/share/vim ,是一个回落值(LCTT 译注:即如果前面失败的话,最终采用的结果)。于是我试着在这个路径寻找 vimrc ,我看到这个文件是存在的。如上即是我的系统 vimrc 文件,就如前面提过的那样 - 它在 Vim 启动时会被读取。

在这个系统级 vimrc 文件被读取解析完后,编辑器会查找一个用户特定的(或者说本地的)vimrc 文件。这个本地 vimrc 的搜索顺序是:环境变量 VIMINIT$HOME/.vimrc、环境变量 EXINIT, 和一个叫 exrc 的文件。通常情况下,会存在 $HOME/.vimrc~/.vimrc 这样的文件,这个文件可看作是本地 vimrc。

我们谈论的是什么兼容性

就像我们谈论 Vim 的兼容性模式和不兼容性模式那样,这些模式的开启和禁用会做出什么样的兼容性也值得了解。要了解这些,先要知道 Vim 是 VIMproved 的缩写,像这个全名暗示的那样,Vim 编辑器是 Vi 编辑器的改进版。

经过改进意味着 Vim 的功能集比 Vi 的更大。为了更好的理解这俩编辑器的区别,点这里

当谈论 Vim 的兼容和不兼容模式时,我们所说的兼容性是指 Vim 兼容 Vi。在兼容模式下运行时,Vim 大部分增强及改善的功能就不可用了。不管怎样,要记住这种模式下,Vim 并不能简单等同 Vi - 此模式只是设定一些类似 Vi 编辑器工作方式的默认选项。

不兼容模式 - 不用多说 - 使得 Vim 用起来跟 Vi 不兼容,也使得用户可以用到它的所有增强、改善及特征。

怎么启用/禁用这些模式?

在 Vim 中尝试运行 :help compatible 命令,接着你会看到如下语法:

'compatible' 'cp' boolean (默认开启 ,当 |vimrc| 或 |gvimrc| 存在时关闭)

描述中说到兼容模式默认开启的,不过当 vimrc 文件存在时会关闭。但说的是哪种 vimrc 文件呢?答案是本地 vimrc。深入研究下 :help compatible 命令给出的详情,你会发现下面内容说得更清楚:

事实上,这意味着当一个 |vimrc| 或 |gvimrc| 文件存在时,Vim 会用默认的 Vim,否则它会用 Vi 默认的。(注:如果系统级的 vimrc 或 gvimrc 文件中带有 |-u| 参数,则不会这样。)。

那么在 Vim 启动时,实际上进行的动作是,首先会解析系统 vimrc 文件 - 在这时处于兼容性模式默认开启状态。现在,无论何时发现一个用户(或成为本地) vimrc ,不兼容模式都会打开。:help compatible-default命令说的很清楚:

在 Vim 启动时,‘compatible’选项是打开的。这将在 Vim 开始初始化时应用。但是一旦之后发现用户级 vimrc 文件,或在当前目录有一个 vimrc 文件,抑或是 VIMINIT 环境变量已设置,Vim 就会被设为不兼容模式。

假如你想无视默认的行为,要在编辑器开始解析系统 vimrc 文件时打开不兼容模式,你可以通过添加如下命令到那个文件的开头来完成这个操作。

:set nocompatible

其他有用细节

这儿是一些关于这些模式的更有用的细节:

现在通过创建一个 .vimrc 文件来设置或重置兼容性会有一个副作用:(键盘)映射(Mapping)在解释的时候会有冲突。这使得在用诸如回车控制符 <CR> 等情况时会有影响。如果映射关系依赖于兼容性的某个特定值,在给出映射前设置或者重置它。

上述行为能够用以下方式能覆盖:

  • 如果给出 -N 命令行参数,即使不存在 vimrc 文件, ‘不兼容模式’ 也会启用。
  • 如果给出 -C 命令行参数,即使存在 vimrc 文件, ‘兼容模式’ 也会启用。
  • 如果应用了 -u {vimrc} 参数,‘兼容模式’将会启用。
  • 当 Vim 的可执行文件的名称以 ex 结尾时,那这个效果跟给出 -C 参数一样:即使存在一个 vimrc 文件,‘兼容模式’ 也会启用,因为当 Vim 以 “ex” 的名称启用时,就会让 Vim 的工作表现得像 “前任” 一样(LCTT 译注:意即 Vim 像 Vi 一样工作)。 `

结论

我们都觉得,你可能不会发现你自己有机会处于一种你需要打开 Vim 的 Vi 兼容模式的情形中,但是那并不意味着你应该不知道 Vim 编辑器的初始化过程。毕竟,你绝不会知道这些知识什么时候会帮到你。


via: https://www.howtoforge.com/tutorial/vim-editor-modes-explained/

作者:Himanshu Arora 译者:ch-cn 校对:wxy

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

这篇文章是 Vim 用户指南系列文章中的一篇:

毫无疑问, Vim 是一个很强大的文本编辑器。它提供了大量的特性,这意味着学习并记住 Vim 的所有功能实际上是不可能的。但是我们至少可以不断学习简单的方法来完成事情,从而随着时间的增长,我们使用编辑器的经验将会变得更好。

请记住,在这篇文章中我们将讨论的一些 Vim 编辑器技巧是针对高级用户的。

:如果你是第一次接触 Vim,你可以首先阅读我们的入门指南。对于已经使用过 Vim 编辑器的用户,我确信 Vim 快捷键速查表将会对你很有帮助。如果你已经是一名有经验的用户,你可能对一些针对有经验用户的技巧比较感兴趣。

请注意文中提到的所有技巧绝大多数都是在简单、易于理解的代码环境中进行阐述的,因为它们在软件开发中确实很实用。但这并不意味着普通用户(非程序员、没有把 Vim 作为一般的文本编辑器)在他们的工作中用不到。

1、为文件设置特定的变量

有时候,在一个特定文件中,你可能想把输入的制表符用空格代替,或者想要把源代码文件使用两个空格缩进,即便编辑器的默认缩进是四个空格。

基本上我们在这儿讨论对针对文件的的更改。 Vim 提供的这个特性允许你对一个指定的文件更改特定的设置。这个特性叫做 “ 模式行 Modeline ” 。

比如,如果你想把输入的每一个制表符(Tab)用空格代替,那么你只需要在文件的前几行或最后几行加入下面的模式行:

# vim: set expandtab:

如果想把默认缩进从 4 个空格变成 2 个空格,可以在源文件中添加下面的模式行:

// vim: noai:ts=2:sw=2

在使用模式行时,请记住下面这几个重要的点:

  • 模式行只能添加在文件中的前五行或者最后五行。
  • 为了使用模式行这个特性,必须在 .vimrc 文件中添加 :set modeline
  • 在以 root 用户身份对文件进行编辑的时候该特性失效。

了解更多的信息,请阅读该特性的官方文档

2、 关键字补全

当你开始写的复杂代码越来越多或者开始在一个大的源文件上编辑时,你会遇到一些变量名字。有时,要记住所有的变量名字不太容易,所以当需要输入变量名字的时候,你通常从已经使用过的地方复制过来。

幸运的是,使用 Vim 你只需要输入变量的几个起始字母即可。在’插入模式’中,按 Ctrl + n 或者 Ctrl + p 可以得到一个匹配的关键词列表。 Ctrl + n 用来插入下一个匹配词; Ctrl + p 给出一个之前匹配的关键词列表。

下图是该特性的一个展示:

正如上面的屏幕截图清晰展示的那样,列表中也会出现其他源文件中包含的词。关于该特性的更多信息,请访问这儿

3、 搜索

假设你正在调试代码,其中一个需要做的工作是快速查看一个变量在一个文件中所有出现的地方。一个常用的方法是退出‘插入模式’,输入 /[变量名字] 命令,按回车 ,然后返回‘插入模式’,使用 np 在关键字之间导航。

上面讲到的这种方法没毛病,但是还有一种更简单、更快捷的方法可以来完成这样的搜索。使用这种方法,首先你需要退出‘插入模式’,然后把光标移动到你想要搜索的词/变量下面,这并不费时。接下来,你只需要按 Shift + * 即可。

重复这样做,然后编辑器将会带你找到在文件中所有使用了这个词/变量的地方。

结论

尽管是针对高级用户,但文章中讨论的这些技巧并不难理解,也比较容易使用。如果你具有一定的基础,那么你能够从中获益很多。不必多说,无论是任何新特性或观念,你需要勤于练习这些技巧才能够把它们变成一种习惯。


via: https://www.maketecheasier.com/vim-tips-tricks-advanced-users/

作者:Himanshu Arora 译者:ucasFL 校对:wxy

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