Vim不论是在Linux上使用还是作为一个常用的编辑器来使用它无疑是最强大的,熟练掌握vim的使用非常之重要。

Vim官方教程可通过vimtutor命令查看。

Vim

移动光标

移动光标是按hjkl 键。

1
2
3
4
5
      ^
k 提示: h 的键位于左边,每次按下就会向左移动。
< h l > l 的键位于右边,每次按下就会向右移动。
j j 键看起来很象一支尖端方向朝下的箭头。
v

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

键盘上的方向键也是可以的。但是使用hjkl键,在习惯之后您就能够更快地在屏幕内四处移动光标。

Vim的进入和退出

首先按下ESC键确保处于正常(Normal)模式,输入:q回车就是退出vim,当然前提是你没有做任何的更改,否则就会报错。

输入:wq就是保存并退出

输入:q!就是强制退出,即使你更改了内容,强制退出之后并不会保存更改内容

文本编辑

文本编辑之删除

在正常(Normal)模式下可以按下x键来删除光标所在位置的字符。

删除字符

注意是在NORMAL模式下哦

文本编辑之插入

打开vim之后默认会处于Normal模式,怎么对文件内容进行更改呢?按i键即可。

文本插入

插入完需要的字符之后可千万别急着用Ctrl+S进行保存,先按ESC进入Normal模式在进行保存。

文本编辑之添加

i键功能差不多,A键的功能就是插入文本

添加

编辑文件

上面已经说过了输入:wq就是保存文件,使用vim新建文件就是直接在Shell里输入vim (filename),编辑完保存即可。如果不需要保存改动,输入:q!即可。

编辑文件

有点小失误不要在意O(∩_∩)O哈!

小结一下

  1. 光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键。

    h (左移) j (下行) k (上行) l (右移)

  2. 欲进入 Vim 编辑器(从命令行提示符),请输入:vim 文件名 <回车>

  3. 欲退出 Vim 编辑器,请输入 ESC 进入Normal模式,再输入 :q! <回车> 放弃所有改动。或者输入 :wq <回车> 保存改动。

  4. 在正常模式下删除光标所在位置的字符,请按: x

  5. 欲插入或添加文本,请输入:

      `i`   输入欲插入文本   `ESC`    在光标前插入文本
      `A`   输入欲添加文本   `ESC`    在一行后添加文本
    

    特别提示:按下 ESC 键会带您回到正常模式或者撤消一个不想输入或部分完整的命令。

删除类命令

删除

按下ESC确认处于Normal模式,输入dw 可以从光标删除到一个单词的末尾。

dw删除

输入d$ 可以从光标处直接删除到行末

d$

前两下是使用dw 来删除,所以并不会删除完,只是删除到单词的末尾,最后一下是d$ 删除,可以直接删除到行末

关于d命令和对象

许多改变文本的命令都由一个操作符和一个动作构成。使用删除操作符 d 的删除命令的格式如下:d motion 其中:
d - 删除操作符。
motion - 操作符的操作对象(在下面列出)。

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

因此输入 de 会从当前光标位置删除到单词末尾。

特别提示:对于勇于探索者,请在正常模式下面仅按代表相应动作的键而不使用操作符,您将看到光标的移动正如上面的对象列表所代表的一样。

使用数字操作

指定动作

在命令前加上数字可以使它重复指定次数,例如输入2w 使光标向前移动两个单词

2w

输入3e 向前移动到第三个单词的末尾,输入0移动到行首等。

3e、0

使用数字删除更多

输入d2w 可以同时删除两个挨着的单词

d2w

当然其他数字也是同理,只要语法正确即可。

操作整行

删除

输入dd 可直接删除一个整行

dd

数字

输入2dd 可直接删除两行

撤销类命令

输入u 可撤销最后执行的命令,输入U 可撤销对整行的更改(注意大小写)

u和U

Crtl+R 快捷键可以撤销任何命令

小结

  1. 欲从当前光标删除至下一个单词,请输入:dw
  2. 欲从当前光标删除至当前行末尾,请输入:d$
  3. 欲删除整行,请输入:dd
  4. 欲重复一个动作,请在它前面加上一个数字:2w
  5. 在正常模式下修改命令的格式是:operator [number] motion 其中:
    `operator` - 操作符,代表要做的事情,比如 `d` 代表删除
    `number`   - 可以附加的数字,代表动作重复的次数
    `motion`   - 动作,代表在所操作的文本上的移动,例如 `w` 代表单词(word),`$` 代表行末等等。
    
  6. 欲移动光标到行首,请按数字0键:0
  7. 欲撤消以前的操作,请输入:u (小写的u) 欲撤消在一行中所做的改动,请输入:U (大写的U) 欲撤消以前的撤消命令,恢复以前的操作结果,请输入:CTRL+R

置入类命令

输入p 可以将最后一次删除的内容置入光标之后,和dd 结合起来就相当于剪切和粘贴功能

dd和p

替换类命令

输入r 和一个字符替换光标所在位置的字符

t被替换为T

更改类命令

输入ce 会将从光标到单词末的字符删除,同时进入插入模式进行修改

ce

需要注意的是ce 会更改模式到插入模式,修改完记得使用ESC 键恢复到Normal模式

同理,输入 cw 会从光标到下一个单词始的字符删除,输入c$ 会从光标到行末(行末和单词末可不一样哦)。

c 命令和其他命令一样,也可以使用数字进行重复执行,语法也相同,再次不多赘述。

小结

  1. 要重新置入已经删除的文本内容,请按小写字母 p 键。该操作可以将已删除的文本内容置于光标之后。如果最后一次删除的是一个整行,那么该行将置于当前光标所在行的下一行。
  2. 要替换光标所在位置的字符,请输入小写的 r 和要替换掉原位置字符的新字符即可。
  3. 更改类命令允许您改变从当前光标所在位置直到动作指示的位置中间的文本。比如输入 ce 可以替换当前光标到单词的末尾的内容;输入 c$ 可以替换当前光标到行末的内容。
  4. 更改类命令的格式是:c [number] motion

定位及文件状态

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

看到页面最底部出现一个状态信息行,显示的内容是当前编辑的文件名和文件中光标位置,行号等信息。

文件状态

在Normal模式下,输入gg 光标跳转到首行,输入G 跳转到尾行,输入一个数字和g 则会跳转到指定行。

注意,我的vim界面是已经配置过的,所以默认是显示行号的,如果没有配置,则使用Ctrl+G 会显示当前光标所在行号,如果需要学习vim配置,请看另一篇文章之Vimrc。

搜索类命令

在Normal模式下,输入一个/ 则会跳转到命令输入行,然后输入需要搜索的字符串,回车,就会自动跳转到目标所在行

搜索

要查找同上一次的字符串,只需要按 n 键。要向相反方向查找同上一次的字符串,请输入大写 N 即可。如果想逆向查找字符串,请使用 ? 代替 / 进行。

要回到您之前的位置按 CTRL+O ,重复按可以回退更多步CTRL+I 会跳转到较新的位置。如果查找已经到达文件末尾,查找会自动从文件头部继续查找,除非wrapscan选项被复位。

配对括号的查找

输入 % 可以查找配对的括号 )]} ,首先把光标移动到一个括号处,按下% 光标就会自动跳转到与这个括号配对的另一个括号处

括号查找

查找并替换字符串

例如输入 :s/old/new/g 可以替换 old 为 new

假如第一个字段有好几个怎么办呢?

输入 :s/thee/the <回车> 。请注意该命令只改变光标所在行的第一个匹配串。

输入 :s/thee/the/g 则是替换全行的匹配串,该行中所有的 “thee” 都会被改变

替换字符串

要替换两行之间出现的每个匹配串:

  • 输入 :#,#s/old/new/g 其中 #,## 代表的是替换操作的若干行中首尾两行的行号
  • 输入 :%s/old/new/g 则是替换整个文件中的每个匹配串
  • 输入 :%s/old/new/gc 会找到整个文件中的每个匹配串,并且对每个匹配串提示是否进行替换

小结

  1. CTRL+G 用于显示当前光标所在位置和文件状态信息
    G 用于将光标跳转至文件最后一行
    先敲入一个行号然后输入大写 G 则是将光标移动至该行号代表的行
    gg 用于将光标跳转至文件第一行
  2. 输入 / 然后紧随一个字符串是在当前所编辑的文档中正向查找该字符串
    输入 ? 然后紧随一个字符串则是在当前所编辑的文档中反向查找该字符串
    完成一次查找之后按 n 键是重复上一次的命令,可在同一方向上查找下一个匹配字符串所在;或者按大写 N 向相反方向查找下一匹配字符串所在
    CTRL+O 带您跳转回较旧的位置,CTRL+I 则带您到较新的位置
  3. 如果光标当前位置是括号()[]{},按 % 会将光标移动到配对的括号上
  4. 在一行内替换头一个字符串 old 为新的字符串 new,输入 :s/old/new
    在一行内替换所有的字符串 old 为新的字符串 new,输入 :s/old/new/g
    在两行内替换所有的字符串 old 为新的字符串 new,输入 :#,#s/old/new/g
    在文件内替换所有的字符串 old 为新的字符串 new,输入 :%s/old/new/g
    进行全文替换时询问用户确认每个替换需添加 c 标志 :%s/old/new/gc

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

输入 :! 然后紧接着输入一个外部命令可以执行该外部shell命令,所有的外部命令都可以以这种方式执行,包括带命令行参数的那些。

执行Shell命令

关于保存文件

更改文件名

vim编辑的文件名有两种方式,一是执行vim命令的时候附带文件名参数,这我之前已经说过了,另一种就是在Normal模式下输入 :w filename 就可以指定文件的名称

选择性保存部分文件

首先要进入vim的另一个模式,前面我们已经知道vim的正常Normal模式和插入模式,那么在Normal模式下按v 键就可以进入可视模式

移动光标到要选中的文本的开始,按v 进入可视模式,然后按方向键进行文本选择,可以看到被选择的文本就会进行高亮,然后按: ,命令行位置就会出现:'<,'> ,现在输入w filename ,这个时候vim就会把选中的文本写进filename的文件中去。

当然,可视模式选中的文本也可以进行其他操作,比如d 删除,p 置入,y 复制等。

提取和合并文件

提取和合并文件内容的命令是r ,比如我们现在有两个文件,test1和test2,我想把test1文件中的内容放入test2中的指定位置,就可以在打开test2文件下,把光标移动到指定位置,输入:r test1 ,当然前提是test1文件的路径要正确

提取和合并文件

还可以读取外部Shell命令的输出。例如 :r !ls 可以读取 ls 命令的输出,并把它放置在光标下面,类似于数据流重定向

数据流重定向

小结

  1. :!command用于执行一个外部命令 command
  2. :w FILENAME 可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文件中
  3. v motion :w FILENAME 可将当前编辑文件中可视模式下选中的内容保存到文件FILENAME 中
  4. :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置后面
  5. :r !dir可以读取 dir 命令的输出并将其放置到当前文件的光标位置后面

打开类命令

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

在光标上方打开新的一行,输入大写的 O

附加类命令

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

aiA 都会进入插入模式,惟一的区别在于字符插入的位置

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

输入大写的 R 可连续替换多个字符,替换模式与插入模式相似,不过每个输入的字符都会删除一个已有的字符

复制粘贴文本

上面提过复制命令,现在来详细示范一下,使用操作符 y 复制文本,使用 p 粘贴文本

复制粘贴

提示:还可以把 y 当作操作符来使用;例如 yw 可以用来复制一个单词,yy 复制一整行等

设置类命令的选项

这个就涉及vim的配置文件了,另起一篇文章详解,请移步。

获取vim官方帮助

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

  • 按下 F1
  • 输入 :help <回车>

CTRL+W 可以使您在窗口之间跳转。输入 :q <回车> 可以关闭帮助窗口。
提供一个正确的参数给 :help 命令,您可以找到关于该主题的帮助。请试验以下参数(可别忘了按回车键哦):

  • :help w
  • :help c_CTRL-D
  • :help insert-index
  • :help user-manual

补全功能

vim中也有类似于bash shell中的命令补全功能,同样也是TAB键,按Ctrl+D 会显示命令列表,然后TAB 补全即可。

vim基础使用就这么多,如果想了解更高阶的vim配置,情移步。