史上最伟大的编辑器 vim教程

1. 移动光标

在 VIM 中移动光标,当然可以使用方向键,但是为此我们需要将手向右下角挪动 20 cm……

VIM 提供了更好的方式,就是使用 h j k l 四个按键(普通模式),这时我们的手指不需要离开字符区便可控制光标的移动。

h:左

j: 下

k:上

l : 右

2. 插入模式和退出VIM的方法

a 插入模式

在 Linux 的命令行通过 vi 文件名 或 vim 文件名 即可用 VIM 编辑器打开你的文件,打开文件后默认是进入了普通模式,我们可以用 h、j、k、l 四个按键分别左、下、上、右地移动光标。当光标抵达目标位置之后,敲一下 i 按键使得 VIM 切换到插入模式(界面左下角显示 -- INSERT -- 字样),此时你可以自由的编辑文档了,就像你在 Windows 下使用记事本那样去编辑

回到普通模式,仅需要敲一下键盘左上角的 Esc 按键即可(界面左下角的 -- INSERT -- 标志消失)。

并不只有敲击按键 i 才能进入插入模式,其实方法多了去了,这儿给大家介绍几个常用的:

b 退出方法

一般退出 VIM 分两种:一种是保存修改并退出;另一种则是直接退出。无论你选择哪一种退出方式,都先请敲一下 Esc 按键回到普通模式。

对于第一种(保存修改并退出),这里教大家两招:
 

  • ZZ(两个大写字母Z,也就是Shift+z+z)
  • :wq(这是一个组合命令,如果是 :w 表示保存,而 :q 表示退出)


对于第二种(直接退出)则要区分情况:
 

  • 如果你打开文件只是看看,并不做任何改动,那么直接输入 :q 即可
  • 如果对文件动过手脚,但不希望保存(放弃修改)而直接退出,则需要再后边加上一个感叹号 :q!

3. 删除命令、数字的奥义、撤销和恢复命令

a 删除命令

当然你可以选择在插入模式中使用退格键(Backspace)或删除键(Delete)来删除光标前面或当前的字符。不过这样做挺麻烦的,因为你需要先通过方向键将光标调整到目标位置才行(h、j、k、l需要在普通模式才能使用,还记得吗?)。

在普通模式下,删除单一字符可以用 x 命令。跟在插入模式按下 Delete 键一样,x 命令是删除光标指定的字符。删除更多字符可以使用 d 命令!

使用删除操作符 d 的删除命令的格式是 d motion

d 是 Delete(删除)的意思,motion 即指定要删除的对象,所以这个命令可以很灵活!

motion 其实是一些表示操作范围的指令,比如:

其实你需要练习的就只是几个表示操作范围的命令就可以了,另外还有些规律可循的。

比如 0 和 ^ 两个是一样的,你随意记住一个即可;d0、db、dh 这类往前删除字符的命令,它们是不会删除光标所指定的字符;而删除方向是往后的则相反(d$、dw、dl),会将当前字符也一并删除。

另外 dh 和 dl 两个都只是删除一个字符,而 dj 和 dk 则是一次性删除两行

b 数字的奥秘

普通模式下按一下 h 按键是将光标向左移动一格,而在其前面输入数字 3,即 3h 则是将光标向前移动 3 格,依此类推 3j 则是将光标向下移动三行,3w 则是将光标跳到三个单词后的开始位置……

同样的,d3h 表示删除光标前的 3 个字符,d3j 表示删除光标所在行以及下面 3 行的所有字符,而 d3w 则表示向后删除当前光标到后面第三个单词前的所有字符。

c 撤销

一不小心……删错了……怎么办?

没关系,VIM 有后悔药提供:u 和 U

其中小写的 u 表示撤销最后一次修改;而大写的 U 表示撤销对整行的修改。

d 撤销恢复

又后悔我吃了后悔药……怎么办?VIM 还是有办法!Ctrl + r 快捷键可以恢复撤销的内容!!
 

4. 粘贴命令、替换命令、替换模式和修改命令

a 粘贴命令

在 VIM 下使用删除命令,并不会直接将你的东西删掉,而是放到 VIM 的寄存器中。这样做有一个好处,就是可以让我们简单的实现类似于 Windows 的剪切功能。

使用 p 命令可以将最后一次删除的内容粘贴到光标之后。(大写的 P 则是粘贴到光标之前)

b 拷贝命令

其实我们用的最多的还是拷贝粘贴,VIM 用 y 命令实现拷贝。语法跟删除的 d 命令一样:y motion

其中的 motion 同样是用来表示操作范围的指令,即 yy 表示拷贝当前行,3yy 则表示拷贝 3 行;y$ 表示从光标所在的位置拷贝到行尾的所有字符;yG 则表示从光标所在行拷贝到文件末尾行的所有字符。

拷贝完成之后同样使用 p 命令进行粘贴,没什么好说的。

c 替换命令

VIM 还提供了一个简单的替换命令:r 命令。

r 用于替换光标所在的字符,做法是先将光标移动到需要替换的字符处,按一下 r 键,然后输入新的字符。注意,全程无需进入插入模式,也不会进入插入模式。然后你可能猜到了,数字 + r 可能会产生一些物理反应。先输入【数字】再输入 r,最后输入新字符,说明从当前光标的位置开始,替换【数字】个新字符。

对于需要替换多个字符,更好的方案是直接进入替换模式。按下大写的 R 键,屏幕左下角出现 -- REPLACE -- 字样,说明你已经处于替换模式。此时输入字符可以连续替换光标及其后边的内容。注意:退格键(Backspace)在替换模式中被解释为如果左边内容被替换过,则恢复到原来的样子;如果没有被替换过,则简单的向左移动。修改完毕后,按下 Esc 回到普通模式。

d 修改命令

修改命令我们使用 c 键来启动,格式是:c [number] motion

没错,motion 依然表示范围,[数字]依然拥有奥义,同样是可选的,加上数字表示重复执行多次 motion 范围……

比如 cw 是修改光标指定单词的内容(VIM 的做法就是删除当前光标位置到下个单词前的所有字符,并进入插入模式);而 c2w 便是修改当前光标指定的单词以及下一个单词共计两个单词的内容……

5. 文件信息、跳转、定位括号和缩进 

a 文件信息

有时候,你可能需要知道当前的文件信息,比如文件名,文件状态,文件的总行数,以及光标所在的相对位置。快捷键 ctrl + g 可以解决你的需求

b 跳转

在 VIM 有两种方式可以将光标跳转到指定的位置:
 

  • 行号 + G
  • :行号

比如将光标跳转到第 333 行的位置,你就输入数字 333,再输入大写字母 G 即可见证奇迹;或者输入冒号(:)进入命令行模式,再输入数字 333,最后回车,也可以跳转到目的地。

TIPS:如果单独输入 G 键(前边没有输入数字),那么光标是直接去到文件的最后一行;如果输入两个小写 g,即 gg,则将光标跳转到文件的第一行。

定位括号

VIM 有个按键可以帮你快速定位到另一半括号,别说我没告诉你,就是 % 键。将光标移动到 (),[],{},中的任何一半括号上,按下 % 键,便可看到此时光标已经跳转到另外一半的括号上了。

在程序调试时,这个功能用来查找不配对的括号是很有用的。因为有时候你代码删删删,括号一对给你删了一半,剩下一半落在那里,编译自然就会报错……此时你在落单的那一半括号上使用 % 键,你会发现 VIM 根本不鸟你,因为它找不到另一半了……

缩进

VIM 可以使用尖括号(< 或 >)来控制缩进,我们常用的就是两个同方向的尖括号表示将光标所在的语句进行缩进和反缩进操作。很明显 >> 表示缩进,而 << 则表示反缩进。

但是这样一次只能缩进一行,一行行来也挺麻烦,因此你想到了数字的奥义:先输入数字 2 在输入 >> 表示将光标所在行以及下一行共两行同时插入一个缩进。

不过行数一多……到底要缩进多少行就成了一个问题……

这时,你可以按一下 v 进入可视模式(左下角出现 -- VISUAL -- 字样),然后通过 h、j、k、l 或 其他 motion 来移动你的光标,此时光标所到之处必被一道亮光所包围(表示被选中),选择好需要缩进的目标后,只需按一下 > 即可完成任务。

6. 搜索命令和替换命令

a 搜索命令

你知道文件中必定有你想要的东西,你也知道它的名字,但你却不知道它在哪里?在茫茫字符的海洋中,怎么办?

查找呗,VIM 的查找是从按下斜杠(/)那一刻开始的……

在普通模式下按下斜杠(/)也是进入命令行模式,此时该字符和光标均出现在屏幕的底部,这跟冒号(:)一样。

紧挨着斜杠(/)的是搜索目标,比如 /love,说明你找的是 love 这个字符串在光标后边第一次出现的位置,当然你也可以输入中文,比如 /你瞅啥

那如果要找下一个目标怎么办?这时你只需按 n 键即可定位到下一个符合的目标(向下查找),而按 N 键则返回上一个(向上查找)。

注意:第一个搜索到的目标不是文件中的第一个目标,而是从你的光标所在处开始找到的那个目标。所以你如果想要搜索文件中第一个匹配的目标,你应该先 gg 将光标移动到文件头,然后再使用搜索命令。

在普通模式下按下问号(?)也是进入命令行模式,实现的也是搜索功能。不过这回它是反过来的,你可以认为它是斜杠(/)功能的“反面派”。

VIM 会自动高亮所有匹配的目标,即使在你找到目标之后,它们仍然高傲的亮着!

很烦人对吧?告诉你怎么取消,输入冒号(:)进入命令行模式,然后输入 nohl 即可。

最后提个醒:在搜索命令中,.、*、[、]、^、%、/、?、~ 和 $ 这 10 个字符有着特殊意义,所以在使用这些字符的时候要在前面加上一个反斜杠(\),比如你要搜索问号,则输入 /\?

b 替换命令

通过搜索功能,我们将光标定位到目标位置,如果你确定这个目标是可恶的,需要被替换的,你可以输入 :s/old/new,这样即可将光标所在行的第一个 old 替换为 new;你如果输入的是 :s/old/new/g,则表示将光标所在行的所有 old 替换为 new。

但如果要替换整个文件的所有匹配字符串怎么办?总不能每一行来一下吧?
只要你能想到的,VIM 就有办法!输入 :%s/old/new/g表示替换整个文件中每个匹配的字符串。

噢,你没有太大的把握,希望 VIM 在每次替换前都咨询一下你:“亲,我准备替换 XX 了,你确定要将 XX 替换成 OO 吗?”
可以,输入 :%s/old/new/gc

这是它会让你选择(y/n/a/q/l/^E/^Y)

  • y 表示替换
  • n 表示不替换
  • a 表示替换所有
  • q 表示放弃替换
  • l 表示替换第一个并进入插入模式
  • ^E 表示用 Ctrl+e 来滚动屏幕
  • ^Y 表示用 Ctrl+y 来滚动屏幕

好吧,你可能会问“如果我只想替换第 5 行到第 13 行之间的所有 XX,可以吗?”

当然可以啦,使用 :5,13s/old/new/g 即可胜任你的要求:

7. 执行shell命令、文件另存为、合并文件和打开多个文件

a 执行shell命令

运行在命令行下的 VIM,貌似不可能“最小化”,这就有诸多不方便的地方了。比如有时我需要知道某个路径下有哪些文件(我的程序需要调用它们),那我可能就需要先关闭 VIM,然后查看有哪些文件,最后重新打开 VIM。

这就显得有点折腾了,不符合 VIM 一直强调的高效作风!因此,伟大的 VIM 作者(Bram Moolenaar)高呼一声“我有办法!”,于是祭出了一个感叹号(!)

比如你想知道根目录(/)下面有哪些目录和文件,可以在VIM中输入 :!ls /

然后敲一下回车

总之,在输入冒号(:)进入命令行模式,输入感叹号(!),在其后便可以加上 shell 命令。此后 VIM 将临时跳转回 shell,并执行命令。再次按下 Enter 键回到 VIM。

然后敲一下回车

文件另存为

一般的文本编辑工具都会有“另存为”的功能,用于将文件重新存放到一个新的文件中(旧文件保留不变)。VIM 也可以这么干,做法是输入 :w 新文件名
 

c 内容局部另存为

VIM 除了支持文件另存为之外,还支持另一种新技能:文件局部另存为。言下之意就是,VIM 可以将文件中的局部文本另存为一个新的文件。

这就需要你进入一种新的模式,叫:可视模式

在普通模式中按下 V 键即进入可视模式,进入后左下角显示 -- VISUAL --

此时光标的位置开始为选中状态,你可以通过任何移动或范围的按键来移动光标,光标所到之处皆为选中状态(h、j、k、l 移动光标,$ 去到行尾,0 去到行首……):

选好范围之后的操作就跟“文件另存为”一样了。

按下冒号(:)

现在请输入 w test2

表示新建一个 test2 文件,并将选中的内容单独存放进去。

这里有个问题,如果路径中已经存在 test2 文件,那么 VIM 会提醒你需要加感叹号(!)才能强制覆盖文件。即输入 w! test2

d 合并文件

所谓合并文件,便是在 VIM 打开的一个文件中读取并置入另一个文件。怎么样,光听着就觉得炫酷吧?!

命令很简单,只需要输入冒号(:)进入命令行模式,然后输入 r 文件名

即可将指定文件的内容读取并置入到光标的下一行中。

打开多个文件

VIM 还可以同时打开多个文件,并且允许你通过水平或垂直的方式并排它们。

VIM 使用 –o 或 –O 选项打开多个文件,其中 –o 表示垂直并排,例如 vim -o lesson4 lesson5 lesson6。

打开后默认光标是落在第一个文件中的,此时之前学过的所有命令都可以上,不过仅限于第一个文件。那如何将焦点(光标)切换到另一个文件中呢?很简单,使用 ctrl + w + w 将光标切换到下一个文件;或者使用 ctrl + w + 方向(方向键或 h、j、k、l)。
 

  • 对于垂直并排的文件:使用 ctrl + w + 上、下方向,表示上、下切换文件;
  • 对于水平并排的文件:使用 ctrl + w + 左、右方向,表示左、右切换文件。


不错吧,这样搭配宽屏显示器或者多个显示器,逼格简直爆表!        

退出文件的话可以使用原来的 q、q!、wq 或者 ZZ(shift + z + z)。

但你肯定会发现你如果同时打开三四个文件,这样子却不得不退出三四次才行。太麻烦了……

那有没有更优秀的办法呢?

答案是有的!

只需在原来退出命令的后边加上小写 a,则表示退出动作是针对所有的(ALL):qa、qa!、wqa
 

  • 34
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值