Linux

简明 vim 入门手册

2016-09-27  本文已影响71人  字母数字或汉字

目标人群:熟悉使用标准文本编辑器的用户;知道常用术语,比如游标;有入门级别的终端操作经验——会安装程序,会运行程序。

安装与启动

我假设你已懂得如何安装,或者说,我假设你接触这篇文章前,电脑中已经有了 vim 可以使用。

启动它,不要急着操作,往下阅读。

工作模式

vim 在启动时处在 Normal 模式,这时会有一些功能键可用,也可以跳转到其他模式。

但我们先不讲完整细节,现在先知道有这么四种,足够了。

键位描述

移动游标

你一定会发现 ←↓↑→ 可以移动游标了,但在 Normal 模式下,你可以使用 hjkl 键(一一对应)实现同样的操作,这是给手指不想离开键盘的人准备的甜点。

编辑、保存、退出

Normal 模式下,按 i 键进入 Insert 模式,此时你可以编辑了,输入、删除都是惯常的方式。当你编辑结束,按 ESC 键返回 Normal 模式。

拓展一下,你有更多的方式来进入 Insert 模式:

i insert,在光标前插入
I         在行首插入
a append,在光标后插入,相当于右移一次光标
A         在行末插入
s substitute,删除光标所在的字符,再插入
S             删除光标所在行,再插入
o open,在当前行之下新建行,再插入
O       在当前行之上新建行,再插入

但不必要一开始就记住这么多,先记住 i 就够用了。罗列他们主要是告诉你两点:

  1. vim 大量使用快捷键,通过熟练使用快捷键提高效率
  2. 快捷键大都是有对应含义的,且大小写不同时效果不同

想保存吗?在 Normal 状态按 : 键,进入 Command-line 模式。尝试以下组合:

:w  write,保存
:w [filename] 另存为
:q  quit,退出
:wq 保存并退出
:w! 强行保存(如果文件标识为只读也尝试保存,具体能不能成功那就看权限了)
:q! 强行退出(不保存却退出)

Command-line 模式,你的命令需要按 <enter> 键执行。

最基本的操作你已经学会了,现在开始使用它吧,试着熟练。

好像我们忘了如何读取文件,那就说两个:

首先,你可以在启动 vim 的时候使用 vim <filename> 来打开某个文件,或者你可以使用 :r [filename] 命令来将文件内容追加到当前行之后

复制、剪切、粘贴

现在请回到 Normal 模式(按 ESC),在你欲处理的文本的前后任一端按 v 键进入 Visual 模式。

然后,移动游标,选中你要处理的文本。

y yank,提起。复制选定块到缓冲区,并回到 *Normal* 模式
d delete,删除。剪切选定块到缓冲区,并回到 *Normal* 模式

处理完后,你回到了 Normal 模式,现在可以粘贴了。

p put,放下。把缓冲区的内容粘贴到游标后
P 粘贴到游标前

撤销、重做、重复命令

u  undo,撤销
U        撤销当前行最近的所有修改
<C-r> redo,重做
.  repeat,重复最后一条命令
<n><command> 重复 <command> n次,n 是数字

查找

打开、另存为、

你可以打开多个文件,并使用以下命令切换:

基本的快捷键 TODO

移动游标的进阶快捷键

行内移动

0  到本行行首
^  到本行第一个非空字符的位置(非空字符包括:空格、制表符、回车、换行等)
$  到本行行尾
g_ 到本行最后一个非空字符的位置

行间移动

gg   到第一行
<n>G 到第n行
     在 *Command-line* 模式下使用 :<n> 也能实现相同效果
G    到最后一行,相当于 1G,或者 :1<enter>

词间移动

e/w/E/W

小写时一个单词是由字母,数字和下划线组成的字符串(可视为词法记号),大写时一个单词是由空格隔开的字符串。

w W  word,到下一个单词的开头
e E  end,到单词的结尾
     如果当前游标不在单词结尾,第一次先跳转到本单词的结尾。
*  匹配当前游标所在单词,移动到下一个
#  匹配当前游标所在单词,移动到上一个

括号匹配

将游标移动到括号 (){}[] 上,按 % 键在开闭括号间跳转。

游标的移动非常有用,因为很多命令支持以下组合:

<start-position><command><end-position>

yw  复制从当前位置到下一单词前的内容
ye  复制从当前位置到本单词尾的内容
y^  复制从游标前到行首的内容
y$  复制从游标后到行尾的内容
yG  复制当前行至文件尾的内容
y<n>G 复制当前行至第n行的内容
      比如当前行是第四行,则复制第 2-4 行的内容。
y<n>/<pattern> 复制n个<pattern>之间的字符串。
以上组合剪切(d)同样支持

前驱为 <n> 时,为了避免语义问题,有时候并不表示重复。

<n>yG 仍然为复制当前行至第n行的内容

Normal 模式下:

复制剪切的进阶快捷键

需在 Normal 模式下使用。

yy  复制整行
yny 复制n行,n为数字,也可以是 nyy

dd  剪切整行(dnd、ndd)

x   剪切游标后字符
X   剪切游标前字符

gu 变小写
gU 变大写

花样进入 Visual 模式

最后

更多的内容,写起来太累了,直接 :h xxx 去看吧。

:h s
:h :command
:h 'option'
:h function()
:h ctrl-x
:h i_ctrl-x
:h subject
:h foo<Tab>
:helpgrep foo

还可以在终端打开教程:

$ vimtutor
上一篇下一篇

猜你喜欢

热点阅读