乐趣区

vim-入门笔记

前言

本文的初衷

从知道 vim 开始我就有心学习并尝试过几次,每次都是暂时的心血来潮,最终全部不了了之,就连最基本的 vimtutor 我都是学个两三节就半途而废,所以这次干脆写篇文章,利用几次学习把这篇文章完善起来。既方便自己坚持学习记录,又方便在之后使用中查看和复习。

如果正在看这篇文章的你已经是个老手,或者已经完整练过多次 vimtutor,那么很遗憾本文并不会对你有更多的帮助。

安装

Windows 安装 Git Bash

Linux 和 MacOS 无需安装

单词

Vim 中的快键键都是有语义的,如果了解下面这些单词,相信你记住快捷键也不是什么难事。

quit

write/read

yank(复制)

paste

delete

change

find

word

forward/backward

up/down

insert/append

do/undo/redo

replace

vim 中的模式与模式切换

Vim 有多种模式,分别是:

  • 正常模式(normal)
  • 插入模式(insert)
  • 冒号模式(或者叫命令模式 command)
  • 可视模式(visual)

启动 Vim(在终端输入 vim < 回车 >)后,并不能直接输入字符,vim 默认处于「正常模式」。

  1. 正常模式

「正常模式」一般用于浏览文件,也包括一些复制、粘贴、删除等操作。击键时一般的键 / 键组合会被当成功能键,而不会键入对应的字符。

在此模式下,可以通过键盘在文本中移动光标,移动范围从小到大是字符、单词、行、段落和屏幕。

提示:不论位于什么模式,按下 <Esc> 键(有时需要按两下)都会进入「正常模式」。

  1. 插入模式

「正常模式」下按 i I a A 键,会进入「插入模式」。

在「插入模式」下,击键时会写入相应的字符。

  1. 命令模式

「正常模式」下按 :(冒号)键,会进入「冒号模式」。

在「冒号模式」下可以执行一些输入并执行一些 vim 或插件提供的指令,就像在 shell 里一样。这些指令包括设置环境、文件操作、调用某个功能等等。

  1. 可视模式

「正常模式」下按 v V <Ctrl>+v,都可以进入「可视模式」。

在「可视模式」下,按方向键选择内容。

vimtutor 学习整理

注意:

后文中带尖括号的描述表示键盘按键,比如 < 回车 > 是指回车按键。

在终端(我这里在 windows 下使用的 Gitbash)输入 vim < 回车 > 即可进入 Vim 编辑器;

输入 vimtutor < 回车 > 即可进入 vim 教程。

输入 vim 文件名 < 回车 > 即可进入 Vim 编辑器编辑该文件。

此时编辑器处于「正常模式」,也叫「normal 模式」。

我们稍后提到时再做介绍。

提示:按下 <Esc> 键,会回到「正常模式」或者撤消一个不想输入的命令。

1

1.1 移动光标

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

请随意按下字母了解如何移动光标。

1.2 Vim 的退出

<Esc> :q! 丢弃修改并退出

<Esc> :wq 保存修改并退出

提示:<Esc> 键不是必须的,只是为了确保当前处于「正常模式」。

1.3 文本编辑之删除

x 键删除一个字符

将光标移动至某个单词的起始处,按 dw 删除一个单词(英文)

dd 删除一整行

d$ 会从当前光标处删除至行末

提示:输入 d 之后,字母 d 会出现在屏幕的右下角,等待接下来输入的命令,此时可以按 <Esc> 撤销。

1.4 文本编辑之插入

i 键在光标所在处进入「插入模式」

此时左下角会出现「– 插入 –」或者「– INSERT –」的字样,表示当前处于「插入模式」。

I 键进入「插入模式」,同时光标会跳到所在行的行首。

此时可以输入内容,也可以选择按 <Esc> 键返回到「正常模式」。

提示:注意大小写,在 vim 中很多字母的大小写有着不同但相似的功能。

1.5 文本编辑之添加

输入 a 可以在光标后进入「插入模式」

输入 A 可以在光标所在行的行末进入「插入模式」

提示:a i I A 都会带您进入插入模式,惟一的区别在于字符插入的位置。

2

2.1 关于命令和对象

前文中我们学习的命令都是 d 和某个动作一起构成的。比如 dw 表示删除该单词;d$ 表示删除至行末。

格式如下:d motion

d – 删除操作符

motion – 操作符的操作对象

介绍几个简单的动作:

w – 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。

e – 从当前光标当前位置直到单词末尾,包括最后一个字符。

$ – 从当前光标当前位置直到当前行末。

提示:在「正常模式」下仅按代表相应动作的键而不使用操作符,会看到光标的移动正如上面的动作列表所描述的一样。

2.2 使用计数指定动作

2w 使光标向前移动两个单词

3e 使光标移动到第三个单词的末尾

0 使光标移动到行首(^ 符号也可以做到这一点,只是按起来没有 0 方便)

提示:现在你一定也可以联想到 2h 就表示光标向前移动两个字符,3j 就表示光标向下移动三行等等;你可以任意组合来练习。

提示:输入数字时你会发现右下角也出现了相应的数字。

2.3 使用计数来删除更多

格式如下:d number motion

d2w 或者 2dw 删除两个单词

d2d 或者 2dd 删除两行

2.4 撤销类命令

u 撤销上一操作

U 撤销对整行的操作

<Ctrl> r 反撤销(windows)

3

3.1 置入类命令

p 粘贴

使用 dd 命令删除一整行内容,然后将光标移动到想要粘贴的位置 上方,输入 p 将该行粘贴置入

3.2 替换类命令

将光标移动到想要替换的字符前,输入 r 回车,接着输入想要的字符,就会把光标处的字符替换。

R 键回车进入「替换模式」可以连续替换多个字符。

提示:「替换模式」与「插入模式」相似,不过每个输入的字符都会删除一个已有的字符。

3.3 更改类命令

cw 改变文本直到一个单词的末尾

拆开来看 cwc 表示修改,w 表示一个单词

注意:cw 命令会删除光标处至该单词末尾的字符,并直接进入「插入模式」。

提示:修改好内容后记得按 <Esc> 键来返回「正常模式」。

3.4 使用 c 更改更多

更改类操作符的工作方式跟删除类一致。操作格式是:

c [number] motion

c$ 表示从光标处开始删除至行末并进入「插入模式」。

4

4.1 定位及文件状态

<Ctrl> g(Mac)显示状态信息行,显示的内容是当前编辑的文件名和文件中光标位置。

windows 下的 Gitbash 在编辑器下方一直显示当前光标所在行的信息。

G 跳转到当前文件最后一行

gg 跳转到当前文件第一行

行号 G 跳转到指定行

4.2 搜索类命令

/ 要搜索的字符串 < 回车 > 光标会跳转到搜索的此字符串前

? 要搜索的字符串 < 回车 > 逆向查找

n 查看下一个搜索的匹配项

N 查看上一个搜索的匹配项

<Ctrl> o 回退到最近的一次搜索匹配项的位置

<Ctrl> i 回退到最新的一次搜索匹配项的位置

4.3 配对括号的查找

将光标移动到任意一个 ({ [] } ) 处,按下 % 光标会跳转到另一个对应的括号处

4.4 替换命令

下方几个命令中 old 代表替换前的词,new 表示替换后的词

:s/old/new < 回车 > 替换光标所在行的第一个匹配串

:s/old/new/g < 回车 > 替换全行的匹配串

:#,#s/old/new/g < 回车 > 其中两个 # 号分别表示替换操作的起始行和结尾行,表示替换只在这之间进行

:%s/old/new/g < 回车 > 替换整个文件中的每个匹配串

:%s/old/new/gc < 回车 > 替换整个文件中的每个匹配串之前会询问是否替换

5

5.1 在 Vim 内执行外部命令

:! 外部命令 < 回车 > 执行外部命令

:!ls 列出所在目录的文件

提示:

所有的外部命令都可以以这种方式执行,包括带命令行参数的那些。

所有的 : 命令都必须敲 < 回车 > 键结束。

5.2 保存文件

我们知道了当前目录之后,也可以执行保存命令。

:w TEST 会将当前文件重名为 TEST 并保存到当前目录

:!rm TEST 删除文件

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

v motion :w fileName

按下 v 键,进入「可视模式」,也叫「visual 模式」。

接着移动光标会发现会选中移动过的区域并高亮。

然后按 : 将会看到屏幕底部出现 :'<,'>

接着输入 w TEST

此时整个命令为::'<,'> w TEST,表示将选中内容保存为命为 TEST 的文件

5.4 提取和合并文件

:r TEST 将 TEST 文件的内容置入当前文件的当前光标处

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

6

6.1 打开类命令

o 在当前光标所在行的下方新起一行,并进入「插入模式」

O 在当前光标所在行的上方新起一行,并进入「插入模式」

6.2 附加类命令

输入 e 可以使在光标英文内容中以单词为单位跳转

6.3 复制粘贴文本

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

6.4 设置类命令的选项

输入 :set xxx 可以设置 xxx 选项。一些有用的选项如下:

'ic' 'ignorecase' 查找时忽略字母大小写

'is' 'incsearch' 查找短语时显示部分匹配

'hls' 'hlsearch' 高亮显示所有的匹配短语

选项名可以用完整版本,也可以用缩略版本。

在选项前加上 no 可以关闭选项::set noic

7

7.1 获取帮助信息

按下 <F1> 键或者 :help < 回车 >

连续输入两次 <Ctrl> w 可以切换窗口

7.2 创建启动脚本

.vimrc 文件

7.3 补全功能

使用 <Ctrl> d 可以查看可能的补全结果

使用 <Tab> 可以进行命令行补全(Mac)

请确保 Vim 不是在以兼容模式运行::set nocp

一些 vimtutor 里没提到的命令组合

  • 打开文件,键入 gg 将光标移动到文件的第一行,然后键入 dG 以删除其中的所有行或文本。
  • :1,$d 删除所有行或文本

结语

vim 的使用就像编写程序一样,你总要在实践中去掌握它。好了,现在神器在手,就看能不能熟练使用了。

(完)

退出移动版