一些不起眼但非常有用的 Vim 命令

一些不起眼但非常有用的 Vim 命令

如果我的关于这个话题的最新帖子没有提醒到你的话,那我明确地说,我是一个 Vim 的粉丝。所以在你们中的某些人向我扔石头之前,我先向你们展示一系列“鲜为人知的 Vim 命令”。我的意思是,一些你可能以前没有碰到过的命令,但可能对你来说很有用。作为第二免责声明,我不知道哪些命令是你可能知道的,以及哪些是对你来说有用的。因此这些命令实际上是一些相对少见,但很可能很有用的 Vim 命令。

保存文件并退出

说起来有些惭愧,我也是最近才学到这个命令


  1. :x

和下面的命令是等价的:


  1. :wq

都是保存当前文件并退出。

(译者注:这两个命令实际上并不完全等价,当文件被修改时两个命令时相同的。但如果未被修改,使用 :x 不会更改文件的修改时间,而使用 :wq 会改变文件的修改时间。)

基本计算器

在插入模式下,你可以使用 Ctrl+r 键然后输入 =,再输入一个简单的算式。按 Enter 键,计算结果就会插入到文件中。例如,尝试输入:


  1. Ctrl+r '=2+2' ENTER

然后计算结果“4 ”会被插入到文件中。

查找重复的连续的单词

当你很快地打字时,很有可能会连续输入同一个单词两次,就像 this this。这种错误可能骗过任何一个人,即使是你自己重新阅读一遍也不可避免。幸运的是,有一个简单的正则表达式可以用来预防这个错误。使用搜索命令(默认时 /)然后输入:


  1. \(\<\w\+\>\)\_s*\1

这会显示所有重复的单词。要达到最好的效果,不要忘记把下面的命令:


  1. set hlsearch

放到你的 .vimrc 文件中高亮所有的匹配。

缩写

一个很可能是最令人印象深刻的窍门是你可以在 Vim 中定义缩写,它可以实时地把你输入的东西替换为另外的东西。语法格式如下:


  1. :ab [缩写] [要替换的文字]

一个通用的例子是:


  1. :ab asap as soon as possible

会把你输入的 “asap” 替换为 “as soon as possible”。

在你忘记用 root 方式打开文件时的文件保存

这可能是一个在论坛中一直受欢迎的命令。每当你打开一个你没有写入权限的文件(比如系统配置文件)并做了一些修改,Vim 无法通过普通的 “:w” 命令来保存。

你不需要重新以 root 方式打开文件再进行修改,只需要运行:


  1. :w !sudo tee %

这会直接以 root 方式保存。

实时加密文本

如果你不想让别人看懂你的屏幕上的内容,你可以使用一个内置的选项,通过下面的命令使用 ROT13 来对文本进行编码:


  1. ggVGg?

gg 把光标移动到 Vim 缓冲区的第一行,V 进入可视模式,G 把光标移动到缓冲区的最后一行。因此,ggVG 使可视模式覆盖这个当前缓冲区。最后 g? 使用 ROT13 对整个区域进行编码。

注意它可以被映射到一个最常使用的键。它对字母符号也可以很好地工作。要对它进行撤销,最好的方法就是使用撤销命令:u。

自动补全

这是另外一个令我感到惭愧的功能,但我发现周围很多人并不知道。Vim 默认有自动补全的功能。的确这个功能是很基本的,并且可以通过插件来增强,但它也很有帮助。方法很简单。Vim 尝试通过已经输入的单词来预测单词的结尾。比如当你在同一个文件中第二次输入 “compiler” 时,仅仅输入 “com” 然后保持在插入模式,按 Ctrl+n 键就可以看到 Vim 为你补全了单词。很简单,但也很有用。

比较两个文件的不同

你们中的大多数很可能都知道 vimdiff 命令,它可以使用分离模式打开 Vim 并比较两个文件的不同。语法如下:


  1. $ vimdiff [文件1] [文件2]

但同样的结果也可以通过下面的 Vim 命令来获得:


  1. :diffthis

首先在 Vim 中打开原始文件。然后使用分离模式带来第二个文件:


  1. :vsp [文件2]

最后在第一个缓冲区里输入:


  1. :diffthis

通过 Ctrl+w 来切换缓冲区并再次输入:


  1. :diffthis

这样两个文件中不同的部分就会被高亮。

(译者注:可以直接在一个缓冲区里使用命令 :windo diffthis,而不用输入 :diffthis 两次)

要停止比较,使用:


  1. :diffoff

按时间回退文件

Vim 会记录文件的更改,你很容易可以回退到之前某个时间。该命令是相当直观的。比如:


  1. :earlier 1m

会把文件回退到 1 分钟以前的状态。

注意,你可以使用下面的命令进行相反的转换:


  1. :later

删除标记内部的文字

当我开始使用 Vim 时,一件我总是想很方便做的事情是如何轻松的删除方括号或圆括号里的内容。转到开始的标记,然后使用下面的语法:


  1. di[标记]

比如,把光标放在开始的圆括号上,使用下面的命令来删除圆括号内的文字:


  1. di(

如果是方括号或者是引号,则使用:


  1. di{

和:


  1. di"

删除指定标记前的内容

和删除标记内部有些相似,但目的不同。命令如下:


  1. dt[标记]

会删除所有光标和标记之间的内容(保持标记不动),如果在同一行有这个标记的话。例如


  1. dt.

会删除至句子的末尾,但保持 ‘.’ 不动。

把 Vim 变为十六进制编辑器

这不是我最喜欢的窍门,但有时会很有趣。你可以把 Vim 和 xxd 功能连起来来把文件转换为十六进制模式。命令如下:


  1. :%!xxd

类似的,你可以通过下面的命令恢复原来的状态:


  1. :%!xxd -r

把光标下的文字置于屏幕中央

我们所要做的事情如标题所示。如果你想强制滚动屏幕来把光标下的文字置于屏幕的中央,在可视模式中使用命令(译者注:在普通模式中也可以):


  1. zz

跳到上一个/下一个位置

当你编辑一个很大的文件时,经常要做的事是在某处进行修改,然后跳到另外一处。如果你想跳回之前修改的地方,使用命令:


  1. Ctrl+o

来回到之前修改的地方

类似的:


  1. Ctrl+i

会回退上面的跳动。

把当前文件转化为网页

这会生成一个 HTML 文件来显示文本,并在分开的窗口显示源代码:


  1. :%TOhtml

(译者注:原文是 :%Tohtml,但在我的电脑上是 :%TOhtml)

很基本但很不错。

如果你还知道哪些非常有用但你认为大多数人并不知道的命令,可以随意在评论中分享出来。就像引言中所说的,一个“鲜为人知但很有用的”命令也许只是你自己的看法,但分享出来总是好的。

原文发布时间:2015-01-15

本文来自云栖合作伙伴“linux中国”

时间: 2024-12-03 14:04:33

一些不起眼但非常有用的 Vim 命令的相关文章

几个有用的unix命令快捷键整理_unix linux

几个有用的unix命令快捷键 1.!$ bash或者zsh中表示上一个命令的最后一个参数,比如这里的!$表示的是file-b,那么就很方便的查看file-b的文件内容: 复制代码 代码如下: $ cp file-a file-b $ vim !$ 2.grep -ri -r表示递归查找,在所有子目录中查找,i表示大小写敏感: 比如$ grep */*/*/* 我们就可以替换为grep -r 3.cd - 这个会返回上一次的目录 复制代码 代码如下: [/usr/share/fonts/dejav

程序员都应该知道的130个vim命令

 从1970年开始,vi和vim 就成为了程序员最喜爱的文本编辑器之一.5年前,我写了一个问自己名为"每个程序员都应该知道的100个vim 命令" 这次算是之前那篇文章的改进版,希望你会喜欢. 基础 :e filename Openfilenamefor edition :w Save file :q Exit Vim :q! Quit without saving :x Write file (if changes has been made) and exit :sav filen

最重要,最常用和有用的Linux命令大集合

 最重要,最常用和有用的Linux命令大集合 最重要的15个linux命令1.cd跳转到某个目录2.man显示命令的信息3.ls显示当前路径下可用的目录4.cp拷贝文件5.mv移动文件或者目录6.mkdir创建目录(目录名区分大小写)7.rmdir移除目录8.touch创建文件9.rm移除文件或者目录10.tar存档文件或者目录(压缩/解压)11.pwd当前工作目录(Path Working Directory)12.ifconfig显示网络适配器的相关信息13.locate快速搜索命令14

不常见但是很有用的gcc命令行选项(二)

gcc 编译器提供了几乎数不清的命令行选项列表.当然,没有人会使用过或者精通它所有的命令行选项,但是有一些命令行选项是每一个 gcc 用户都应该知道的 - 即使不是必须知道.它们中有一些很常用,其他一些不太常用,但不常用并不意味着它们的用处没前者大. 在这个系列的文章中,我们集中于一些不常用但是很有用的 gcc 命令行选项,在第一节已经讲到几个这样的命令行选项. 不知道你是否能够回想起,在这个系列教程的第一部分的开始,我简要的提到了开发者们通常用来生成警告的 -Wall 选项,并不包括一些特殊的

不常见但是很有用的 GCC 命令行选项(二)

gcc 编译器提供了几乎数不清的命令行选项列表.当然,没有人会使用过或者精通它所有的命令行选项,但是有一些命令行选项是每一个 gcc 用户都应该知道的 - 即使不是必须知道.它们中有一些很常用,其他一些不太常用,但不常用并不意味着它们的用处没前者大. 在这个系列的文章中,我们集中于一些不常用但是很有用的 gcc 命令行选项,在第一节已经讲到几个这样的命令行选项. 不知道你是否能够回想起,在这个系列教程的第一部分的开始,我简要的提到了开发者们通常用来生成警告的 -Wall 选项,并不包括一些特殊的

10个有用的Linux命令面试问题及答案

10个有用的Linux命令面试问题及答案 Linux命令行,以及用户使用Linux命令进行Linux shell交互,是Linux最吸引人的地方,也是面试中最普遍的话题之一.在这篇文章中,我们将提出10个面试中很重要问题,这肯定能拓宽你的知识面.   Linux Command Questions 1. 如何暂停一个正在运行的进程,把其放在后台(不运行)? 答案:为了停止正在运行的进程,让其在后台(不运行),我们可以使用组合键 Ctrl+Z.(LCTT译注:如果希望其在后台运行,还需要使用bg命

Vim命令高级用法_Linux

1.启动-R  只读方式打开,但打开后如果有权限,可以强制执行保存.-c (command) 加载后执行命令,比如"vim -c /most myfirst" 打开该文件后直接向后搜索most.更多的可以参考 -h 2.同时编辑多个文件vim [file1] [file2] ... 此时 :ar 查看当前编辑的文件名 :n  切换当前编辑的文件 另外还有 :e  切换到新文件 :w  读取已存在的文件并将其内容放入正在编辑的文件中 :w [起始行][终结行] [文件名]  将当前文件部

不常见但是很有用的gcc命令行选项(一)

软件工具通常情况下会提供多个功能以供选择,但是如你所知的,不是所有的功能都能被每个人用到的.公正地讲,这并不是设计上的错误,因为每个用户都会有自己的需求,他们只在他们的领域内使用该工具.然而,深入了解你所使用的工具也是很有益处的,因为你永远不知道它的某个功能会在什么时候派上用场,从而节省下你宝贵的时间. 举一个例子:编译器.一个优秀的编程语言编译器总是会提供极多的选项,但是用户一般只知道和使用其中很有限的一部分功能.更具体点来说,比如你是 C 语言开发人员,并将 Linux 作为你的开发平台,那

11 个很少人知道但很有用的 Linux 命令

Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.Linux命令和它们的转换对于Linux用户.Shell脚本程序员和管理员来说是最有价值的宝藏.有些Linux命令很少人知道,但不管你是新手还是高级用户,它们都非常方便有用. 少有人知道的Linux命令 这篇文章的目的是介绍一些少有人知的Linux命令,它们一定会高效地帮你管理你的桌面/服务器. 1. sudo !!命令 没有特定输入sudo命令而运行,将给出没有权限的错误.那么,