以前都是断断续续地学习使用vim,现在应该一步一个脚印地把每个命令练习熟练了。让我们开始学习vim的里程吧~
一般控制
: 在命令模式下输入一条ex命令,也就是先按":"键
:w 将文件写入硬盘
:q 退出
:q! 退出vi,不保存
:wq 退出vi并保存
i 进入输入模式
Esc 进入命令模式
光标移动
a 在光标之后进入插入模式。
A 将光标移动到行尾并使vim进入插入模式。因为光标不能跳出行末,所以单纯使用i命令并不能完成在文本末尾添加内容的任务。为此vi提供了大写A命令。
数字0 将光标移动到行首
HJKL或方向键 左下上右移动
续表
键
|
光标动作
|
^
|
至本行第一个非空字符
|
$
|
至本行的末尾
|
W
|
至下一单词或标点的开头
|
Shift-W(W)
|
至下一单词的开头,忽略标点
|
B
|
至上一单词或标点的开头
|
Shift-B(B)
|
至上一单词的开头,忽略标点
|
Ctrl-F
或
Page Down
|
下翻一页
|
Ctrl-B
或
Page UP
|
上翻一页
|
number-Shift-G
|
至第
number
行(如
1G
会将光
标移到文件的第一行)
|
Shift-G(G)
|
至文件的最后一行
|
许多vi的命令的前面都可以缀上数字。前缀数字可以控制命令执行的次数,比如5j可以使得光标下移5行。
插入一行功能键
在文本中重开一行,即在两行现存的文字中间插入空白行并同时进入插入模式。
命令
|
开行
|
o
|
当前行的下方
|
O
|
当前行的上方
|
u 取消上次操作。实际上,vi只能取消一次操作,vim可取消多次操作。
删除文本
x 删除光标处的字符。可加以数字前缀来明确删除的字符数目。
d+光标移动命令 d命令总是加以控制删除范围的光标移动命令作为后缀。也可加练数字前缀来明确删除的次数。命令d不只是删除文本,而是在"剪切"文本。
dG 删除当前行到文件末尾
c+光标移动命令 功能和d相同,区别在于完成删除操作后进入INSERT MODE
cc 也是删除当前行,然后进入INSERT MODE
更改字符
rx 将当前光标下的字符更改为x(x为任意字符)
R*** 进入替换模式,直到按下Esc(*为任意长字符)
~ 切换当前光标下的字符的大小写
恢复误操作
u 撤销最后执行的命令
U 修正之前对该行的操作
Ctrl+R Redo
重复操作
. 重复上一次操作
自动补齐
C-n 匹配下一个关键字
C-p 匹配上一个关键字
剪切、复制和粘贴文本
剪切:命令d不只是删除文本,而是在"剪切"文本。用户每次使用d命令之后,都会复制删除的内容进缓存(类似剪贴板),然后用户就可以使用p命令将缓存中的内容粘贴到光标之后或使用P命令将内容粘贴到光标之前。
复制:就像命令d剪切文本的形式一样,命令y会"复制"文本。然后再使用p/P命令进行粘贴。
yy 复制当前行
y+光标移动命令 y命令总是加以控制复制范围的光标移动命令作为后缀。也可加练数字前缀来明确复制的次数。
合并行
vi在行的概念上非常严格。通常来说,将光标移动到行的末端并删除行的末尾字符并不能将此行与下一行合并。因此,vi专门提供了大写J命令(不要与移动光标的小写j命令混淆)来合并行。
函数调用
vim配置文件_vimrc中自定义的函数调用方法是
:call functionName()
Vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在Dos上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。
Vi没有菜单,只有命令,且命令繁多。gvim是它的图形界面改进版本,绝大部分的操作相同。Vi有三种基本工作模式:命令行模式、文本输入模式和末行模式。
任何时候,不管用户处于何种模式,只要按一下键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。
在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
文本输入模式 (input mode/编辑模式)
在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键即可。
末行模式 (last line mode/指令列命令模式)
末行模式也称ex转义模式。
Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。
一、由一般模式转到输入模式的命令
1〉光标移动命令
0 移动到光标所在列的最前面[Home]
$ 移动到光标所在列的最後面[End]
[CTRL][d] 向下半页
[CTRL][f] 向下一页[PageDown]
[CTRL][u] 向上半页
[CTRL][b] 向上一页[PageUp]
H移动到视窗的第一列
M移动到视窗的中间列
L移动到视窗的最后列
G移动到文件最后列
nG直接用数字 n 加上大写 G 移动到第 n 行 (等同于命令“:n”)
fx往右移动到 x 字符上
tx往右移动到 x 字符前
shift +g 跳到文件尾 (等同于G)
gg 跳到文件头
xp 交换两个字符位置
ddp 上下两行调换
[ 移到文件开始位置
] 移到文件结束位置
nk向上移n行
n↑向上移n行
n-向上移n行,光标在该行的起始
ni 向下移n行
n+向下移n行,光标在该行的起始
n↓向下移动n行
w 向前移动一个word
nw 向前移动n个word
→ 向右移动一个字符【l】
← 向左移动一个字符【h】
↑ 向上移动一行【k】
↓ 向下移动一行【j】
x 删除光标所在的字符【delete】
dw 删除光标所在的单词
d $ 删除光标至行尾的所有字符
/d d 同/d d $
dd 删除当前行
dnd 删除当前n行
dG 删除当前行到最后一行
可在删除命令前加上数字,如<5x表示删除5行。
r 替换光标所在的字符
/rr 替换字符序列
c $ 替换自光标位置至行尾的所有字符
cl 修改当前字符
cc 修改当前行
c$ 修改到行尾的内容
:%s#abc#123#g 将文中的所有abc都替换为123
ddp 上下两行交换(其实是先dd,然后执行p)
/string 往前搜索string【支持正则】
n 查找下一个
?string 往后搜索string
/+上下箭头 搜索历史
:+上下箭头 :命令的历史
* 往前查找当前word,前提是光标移动到要查找的word
# 往后查找当前word,前提是光标移动到要查找的word
/\<word\> 只匹配word,不匹配wordstr等等
% 查找匹配的括号,前提是光标要在一边的括号上
fx 在当前行移动到下一个字符x
yw 将光标所在单词拷入剪贴板
y$ 将光标至行尾的字符拷入剪贴板
Y 同
yy 将当前行拷入剪贴板
yny 将当前n行拷入剪贴板
p 将剪贴板中的内容粘贴在光标后
P 将剪贴板中的内容粘贴在光标前
6〉文件编辑、保存及退出vi命令
:q 不保存退出
:q! 不保存强制性退出
:w 保存编辑
:w filename 存入文件filename中
:w! filename 强制性存入文件filename中
:wq / :x / ZZ 保存退出
:wq! 强制保存然后退出
7〉其他命令
:args 显示当前文件名
u 撤销,相当于Ctrl+z
U 一次撤销一行的所有操作
Ctrl+R 重做
:help 查看所有帮助
:help 0 查看关于0的帮助
ZZ 退出帮助,回到编辑模式
Ctrl+G 知道【文件名 是否修改 当前第一行 前面所占行的百分比】
Ctrl+v 选择一个块
:set number 显示行号
:set nonumber 不显示行号
:set rule 显示光标位置
:set ignorecase 搜索不区分大小写
:set noignorecase 搜索区分大小写
:ab string string 提示(比如:ab abc abcdefg,当输入abc然后输入空格,abc自动变为abcdefg)
:new filename 打开或新建文件,如果不指定文件名或者文件名不存在则是新建文件。
:set ruler 打开光标的行列位置显示功能
:set shiftwidth=4 设置自动缩进格数
:set autoindent 打开自动缩进功能
:set paste 粘贴的时候关闭自动缩进
:set nopaste 粘贴的时候打开自动缩进
三、进入vi的命令
vi filename: 打开或新建文件,并将光标置于第一行首
vi +n filename: 打开文件,并将光标置于第n行首
vi + filename: 打开文件,并将光标置于最后一行首
vi +/pattern filename: 打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename: 在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename.filename: 打开多个文件,依次进行编辑
vi + /word filename:进入vi并且由文件的word这个字开始
注意:Ctrl+S在Linux下是停止显示终端的输出,这个时候屏幕就像定住了一样,终端不会继续输出,也不会响应你的输入,需要按一下 Ctrl-Q 即可恢复输入。
命令大多了,还是看文档。