博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
趁年轻,赶快学一波vim
阅读量:6436 次
发布时间:2019-06-23

本文共 6355 字,大约阅读时间需要 21 分钟。

介绍

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。 VIM是自由软件。 Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。

使用

首先我们需要先安装vim

brew install vim // mac安装vimapt-get install vim // ubuntu安装vim复制代码

windows用户请前往搜索引擎搜索vim下载安装

本文通过vimtutor进行vim的学习,安装完vim后在终端输入vimtutor即可

vim模式

命令模式: 用于输入指令,如:保存、运行、切换标签、切割屏幕等 插入模式: 也即编辑模式,用于编辑文本 可视模式: 相当于高亮选取文本后的正常模式 正常模式: 用于查看文本,也可复制、粘贴、撤销、重做等

移动光标

在正常模式键可用h、j、k、l来分别代替←、↓、↑、→键来移动光标,对于初学者来说,这种移动光标的方式十分不习惯,但是用这种方式移动光标在编程的过程中可以不用频繁的移动右手

注意:当某一行为空时,h、l无法进行左右的移动

如果您不敢确定您所按下的字母,请按下键回到正常(Normal)模式。然后再次从键盘输入您想要的命令。

vim的进入和退出

恩,我已经玩熟了光标操作,这个玩意儿太方便啦,咦,但是我怎么退出vim呢

1、按<ESC>键,确定你处于正常模式。

2、然后键入:q, 然后按回车,但这样做并不会将你修改的内容保存。

3、键入:wq,可以在退出的同时保存你所修改的内容。

4、对,你没猜错,如果想只保存不退出,键入:w就行了

文本编辑之删除

那么我想要在正常模式下删除某个内容怎么办呢,很简单,你只需要用我们所学的移动光标方式将光标移动到你想要删除的文本位置,按下x键即可

提示:当我对某个操作不满意,想要撤回的时候,只要键入u即可

文本编辑之插入

哇,我发现文本的内容不是我想要的,我要修改他,可是在正常模式下我好像无法编辑它诶,怎么办。

i进入插入模式,在这个模式下,你可以随意的修改文本了,但是你不能再用h、j、k、l的方式来移动光标了,当你修改完成后,可以按<ESC>返回正常模式

文本编辑之添加

啊?这个插入模式是什么鬼,我怎么只能往光标前添加内容,如果我想在原本的内容后添加新的内容怎么办?

你可以在正常模式下,按a键,然后输入你要添加的内容,同样的,在输入完成后按<ESC>返回正常模式。

删除类命令

之前的删除方法好麻烦啊,难道我删除一大串内容要一个一个移动光标,然后按一次又一次的x吗。当然不是

许多改变文本的命令都由一个操作符和一个动作构成。

使用删除操作符 d 的删除命令的格式如下:

​ d motion

一个简短的动作列表:

​ w - 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。 e - 从当前光标当前位置直到单词末尾,包括最后一个字符。 $ - 从当前光标当前位置直到当前行末。

简单来说,如果我想要删除一个单词只需要键入dw,如果我键入d$,那么这一整行的内容都被我删了

使用计数指定动作

假如vim打开的文件中某一个行有这样一句的内容

This is just a line with words you can move around in.

我的光标在开头的T位置

  • 键入一次e,我的光标位置就会出现在This这个单词的末尾s处,键入两次,就会出现在下一个单词的末尾。
  • 键入w,就会出现在下一个单词的开头,多次键入与e的效果雷同。
  • 键入0,能使我的光标出现在行首。
  • 键入$,能使我的光标出现在行末。

使用计数已删除更多

上面已经提到过删除操作符和动作的组合,你可以在组合中动作之前插入一个数字以删除更多

​ d number(数字) motion

比如键入d2w,我们就可以删除光标所在位置起的两个单词

操作整行

  • 之前用d$命令删除整行内容后,我们会发现这一行变成了一个空行,所以可能用清除整行内容来称呼它更加合适

  • 如果我们要删除当前行,可以键入dd命令

  • 你也可以键入2dd,来删除当前行起的两行

撤销类命令

  • 之前有提到过,如果你操作失误,可以键入u来撤销最后一次执行的命令
  • 如果你嫌一次一次的撤销太麻烦,你可以键入U,来使当前行恢复到初始状态
  • 你也可以键入CTRL-R(先按着CTRL键不放,再键入R)来重做撤销的命令

置入类命令

之前所说的dd命令删除了一整行内容,其实呢,他并没有它并没有消失,而是保存在了vim的寄存器中。

  • 当使用dd命令删除了某一行内容后,光标移到某一行,键入p,刚刚删除掉的那一行内容就会粘贴到当前行的下一行了

替换类命令

当我们发现某处出错时,我们可以不必先删除再插入来修改错误,这样子太麻烦,我们可以使用替换命令。

如下两行,第一行有错误,第二行是正确的,我们想要将第一行单词出错的地方修正可以怎么做呢

Whan this lime was tyoed in, someone presswd some wrojg keys!

When this line was typed in, someone pressed some wrong keys!

  • 将光标移到所要修改的字符处,键入p,然后输入所要替换的字符即可

更改类命令

同样的我们也可以更改整个单词,而不是一个字符

  • 键入cw,然后输入正确的内容,我们就可以更改整个单词了。

使用c更改更多

更改类操作符的工作方式跟删除类是一致的。操作格式是: ​ c [number] motion

动作参数(motion)也是一样的,比如 w 代表单词,$代表行末等等

  • 除了上一节所说的cw,我也可以键入c$,用来修改当前字符到行末的所有内容

定位及文件状态

输入 CTRL-G 显示当前编辑文件中当前光标所在行位置以及文件状态信息。输入大写 G 则直接跳转到文件中的某一指定行

提示:切记要先通读本节内容,之后才可以执行以下步骤!!!

  1. 按下 CTRL 键不放开然后按 g 键。我们称这个键组合为 CTRL-G。您会看到页面最底部出现一个状态信息行,显示的内容是当前编辑的文件名和文件中光标位置。请记住行号,它会在步骤3中用到。

  2. 输入大写 G 可以使得当前光标直接跳转到文件最后一行。输入 gg 可以使得当前光标直接跳转到文件第一行。

  3. 输入您曾停留的行号,然后输入大写 G。这样就可以返回到您第一次按下CTRL-G 时所在的行了。

搜索类命令

输入 / 加上一个字符串可以用以在当前文件中查找该字符串。

1、 在正常模式下输入 / 字符。您此时会注意到该字符和光标都会出现在屏幕底部,这跟 : 命令是一样的。

2、接着输入你要查找的内容,然后按回车,就会查找到您所输入的字符串

3、要查找同上一次的字符串,只需要按 n 键。要向相反方向查找同上一次的字符串,请输入大写 N 即可。

4、如想逆向查找字符串,请使用 ? 代替 / 进行。

5、要回到您之前的位置按 CTRL-O (按住 Ctrl 键不放同时按下字母 o)。重复按可以回退更多步。CTRL-I 会跳转到较新的位置。

提示:如果查找已经到达文件末尾,查找会自动从文件头部继续查找,除非'wrapscan' 选项被复位。

配对括号的查找

输入%可以查找配对的字符串

*当你的光标位置在某一个括号上,键入%,你的光标就会跳到与之配对的括号位置了,如果再次键入,光标就会调回配对的第一个括号处

在程序调试时,这个功能用来查找不配对的括号是很有用的。

替换命令

假如有这么一行字符串

thee best time to see thee flowers is in thee spring.

  • 当我键入:s/thee/the <回车>,那么该行的第一thee就被我替换成了the
  • 如果想将所有的thee替换,可以键入:s/thee/the/g
  • 要替换两行之间出现的每个匹配串,请 输入 :#,#s/old/new/g 其中 #,# 代表的是替换操作的若干行中首尾两行的行号。 输入 :%s/old/new/g 则是替换整个文件中的每个匹配串。 输入 :%s/old/new/gc 会找到整个文件中的每个匹配串,并且对每个匹配串提示是否进行替换。

在vim内执行外部命令的方法

再用vim编程的时候,如果我想输入一个外部命令怎么办,难道我还需要新建个终端窗口吗?当然不需要

1、 按下我们所熟悉的 : 命令使光标移动到屏幕底部。这样您就可以输入一行命令了。

2、 接着输入感叹号 ! 这个字符,这样就允许您执行外部的 shell 命令了。

3、 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当前目录的内容,就如同您在命令行提示符下输入 ls 命令的结果一样。如果 !ls 没起作用,您可以试试 :!dir 看看。

关于保存文件的更多信息

要将对文件的改动保存到文件中,请输入 :w FILENAME 。

1、 输入 :!dir 或者 :!ls 获知当前目录的内容。您应当已知道最后还得敲<回车> 吧。

2、 选择一个未被用到的文件名,比如 TEST。

3、 接着输入 :w TEST (此处 TEST 是您所选择的文件名。)

4、 该命令会以 TEST 为文件名保存整个文件 (Vim 教程)。为了验证这一点,请再次输入 :!dir:!ls 查看您的目录列表内容。

一个具有选择性的保存命令

要保存文件的部分内容,请输入 v motion :w FILENAM

1、移动光标到某一行

2、键入v,将光标移到下面几行,您会发现,之前的文本被高亮了

3、然后键入:,您将看到屏幕底部会出现 :'<,'> 。

4、现在请输入 w TEST,其中 TEST 是一个未被使用的文件名。确认您看到了 :'<,'>w TEST 之后按 <回车> 键。

5、这时 Vim 会把选中的行写入到以 TEST 命名的文件中去。使用 :!dir:!ls确认文件被正确保存。这次先别删除它!我们在下一讲中会用到它

按 v 键使 Vim 进入可视模式进行选取。您可以四处移动光标使选取区域变大或变小。接着您可以使用一个操作符对选中文本进行操作。例如,按 d 键会删除选中的文本内容。

提取和合并文件

要向当前文件中插入另外的文件的内容,请输入 :r FILENAME

1、将光标移到新的一行

提示:步骤2之后您将看到第五讲第三节的文字,请届时往下移动以再次看到本讲内容

2、接着通过命令 :r TEST 将前面创建的名为 TEST 的文件提取进来。您所提取进来的文件将从光标所在位置处开始置入

3、为了确认文件已经提取成功,移动光标回到原来的位置就可以注意有两份上一讲的内容,一份是原始内容,另外一份是来自文件的副本。

您还可以读取外部命令的输出。例如, :r !ls 可以读取 ls 命令的输出,并把它放置在光标下面。

打开类命令

输入 o 将在光标的下方打开新的一行并进入插入模式。

  • 当光标在任意行时,键如o,可以打开新的一行并进入插入模式,您可以写入新的内容,写入完成后按<ESC>返回正常模式。

附加类命令

输入 a 将可在光标之后插入文本

另外一个置换类命令的版本

输入大写的 R 可连续替换多个字符。

假如有如下两个字符串

Adding 123 to xxx gives you xxx. Adding 123 to 456 gives you 579.

  • 您可以将光标移到第一句的xxx处,然后键入R,进行连续的输入,知道内容与第二句相似,按ESC进入正常模式,将光标移到下个xxx处,重复上述操作,这样上下两个字符串就相等啦。

复制粘贴文本

使用操作符 y 复制文本,使用 p 粘贴文本

1、首先将光标移到要复制的内容开头。

2、键入v进入可视模式。

3、移动光标,将要复制的内容高亮

4、键入y抽离文本

5、将光标移动到你希望复制的位置,键入p粘贴

设置类命令的选项

1、 要查找单词 ignore 可在正常模式下输入 /ignore <回车>。要重复查找该词,可以重复按 n 键。

2、 然后设置 ic 选项(Ignore Case,忽略大小写),请输入: :set ic

3、 现在可以通过键入 n 键再次查找单词 ignore。注意到 Ignore 和 IGNORE 现在也被找到了。

4、 然后设置 hlsearch 和 incsearch 这两个选项,请输入: :set hls is

5、 现在可以再次输入查找命令,看看会有什么效果:/ignore <回车>

6、 要禁用忽略大小写,请输入: :set noic

提示:要移除匹配项的高亮显示,请输入: :nohlsearch 提示:如果您想要仅在一次查找时忽略字母大小写,您可以使用 \c:/ignore\c <回车>

获取帮助信息

Vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统,请选择如下三种方法之一:

  • 按下<HELP>键 (如果键盘上有的话)
  • 按下 <F1> 键 (如果键盘上有的话)
  • 输入 :help <回车>

请阅读帮助窗口中的文字以了解帮助是如何工作的。

  • 输入 CTRL-W CTRL-W 可以使您在窗口之间跳转。

  • 输入 :q <回车> 可以关闭帮助窗口。

  • 提供一个正确的参数给":help"命令,您可以找到关于该主题的帮助。请试验以下参数(可别忘了按回车键哦):

:help w:help c_CTRL-D:help insert-index:help user-manual复制代码

创建启动脚本

Vim 的功能特性要比 Vi 多得多,但其中大部分都没有缺省启用。为了使用更多的特性,您得创建一个 vimrc 文件。

1、 开始编辑 vimrc 文件,具体命令取决于您所使用的操作系统:

:edit ~/.vimrc     // 这是 Unix 系统所使用的命令:edit $VIM/_vimrc  // 这是 MS-Windows 系统所使用的命令复制代码

2、 接着读取 vimrc 示例文件的内容:

:r $VIMRUNTIME/vimrc_example.vim复制代码

3、 保存文件,命令为: :write

下次您启动 Vim 时,编辑器就会有了语法高亮的功能。您可以把您喜欢的各种设置添加到这个 vimrc 文件中。要了解更多信息请输入 :help vimrc-intro

补全功能

1、 输入 :help 或者按 <F1> 键或 <Help> 键可以打开帮助窗口。

2、 输入 :help cmd 可以找到关于 cmd 命令的帮助。

3、 输入 CTRL-W CTRL-W 可以使您在窗口之间跳转。

4、 输入 :q 以关闭帮助窗口

5、 您可以创建一个 vimrc 启动脚本文件用来保存您偏好的设置。

6、 当输入 : 命令时,按 CTRL-D 可以查看可能的补全结果。 按 <TAB> 可以使用一个补全。

小结

相信学会了vim,你的编程效率能更上一层楼,梦想还是要有的,趁还年轻。

转载于:https://juejin.im/post/5aed4b0651882567127868df

你可能感兴趣的文章
ANT 运行jar包的中文乱码问题
查看>>
【Xamarin.Android】应用消费品
查看>>
Programming with gtkmm 3
查看>>
LinuxUSB驱动程序调试--009:编写应用程序---验证协议【转】
查看>>
brk(), sbrk() 用法详解【转】
查看>>
iOS:quartz2D绘图 (动画)
查看>>
Linux内存管理原理【转】
查看>>
[搜片神器]直接从DHT网络下载BT种子的方法
查看>>
【译】UNIVERSAL IMAGE LOADER. PART 3---ImageLoader详解
查看>>
Node.js~ioredis处理耗时请求时连接数瀑增
查看>>
OOAD 面向对象分析与设计
查看>>
<context:component-scan>使用说明
查看>>
纹理贴图的干扰问题
查看>>
22.3. xinetd.d
查看>>
窗体间传值和窗体间互操作
查看>>
Jquery+php+ajax实现表单异步提交,动态添加回复评论
查看>>
3中查询数据库连接数
查看>>
oracle数据库中对varchar类型求max的解决方法
查看>>
JDK的OutputStream为什么方法write(int b)的入参类型是int呢?
查看>>
总结---3
查看>>